2016-03-02 35 views
0

环境: [email protected] [email protected] [email protected] [email protected]Browserify - 变换的package.json的符号链接模块npm3不工作

试图构建与[email protected]工作的应用程序和[email protected],但在升级到[email protected][email protected]时出现问题。请允许我尝试解释问题。

  • app/node_modules我已经通过通过npm link符号链接npm install和本地模块安装的模块。

  • 本地模块已在其package.json如指定browserify变换 -

}, "devDependencies": { "babel-preset-es2015": "^6.5.0", "babelify": "^7.2.0" }, "browserify": { "transform": [ [ "babelify", { "presets": [ "es2015" ] } ] ] }

试图建立我得到错误:

"Browserify Error: Couldn't find preset "es2015" relative to directory"

NPM 3已经夷为平地依赖树,所以babel-preset-es2015的yinkinked模块需要位于appnode_modules。根据@substack here的解释和这个例子here browserify应该从符号链接模块走到树上app并在那里检查node_modules,但是它似乎没有这样做。

我的目录结构是这样的:

~/projects |-- app |-- entry.js (this file can see babel-preset just fine) |-- node_modules |-- babel-preset-es2015 |-- my-module (symlink pointing at ~/projects/modules-shared/my-module) |-- index.js (we want babelify to transform this file) |-- modules-shared |-- my-module

如果我在modules-shared文件夹中安装babel-preset-es2015,browserify找到预设。

+0

你有没有解决你的问题? – Shawn

回答

1

回到这个问题,我有点忽略。这个问题很难解决,因为它涉及到所用工具的两个不同特征。

首先,Browserify不会像它应该那样处理符号链接。它不是将符号链接的npm模块视为其符号链接位置,而是将其实际位置置于文件系统中,因此无法在npm3的扁平文件树下找到它的依赖关系。其次,Babel要求其依赖关系位于所讨论模块的node_modules中,这实际上是对npm2嵌套文件树系统的一种强烈依赖。

因此,出于同样的原因,我们有两个不同的问题--npm3改变了node_modules的组织方式。

我能找到的最佳解决方法是编写一个只安装任何符号链接模块的babel依赖项的自定义脚本。您可能认为只安装符号链接模块的所有依赖关系是一个好主意,但这会导致Browserified bundle中的重复实例,从而导致各种微妙的,难以理解的错误。

可以用这个变换realpathify来解决Browserify问题,但对于Babel的问题,我没有看到任何解决方案的动向。

相关问题