如何协调全球webpack安装和本地装载机

我的package.json包括webpack和一些加载器:

 "devDependencies": { "babel-core": "^5.2.17", "babel-loader": "^5.0.0", "jsx-loader": "^0.13.2", "node-libs-browser": "^0.5.0", "webpack": "^1.9.4" } 

当我运行webpack它不在我的path,所以它不显示为find。 我安装了全局的npm install -g webpack所以二进制文件会出现在我的path中,但是不能find安装在./node_modules中需要处理我的依赖关系树的加载模块:

 $ webpack --progress --colors --watch 10% 0/1 build modules/usr/local/lib/node_modules/webpack/node_modules/webpack-core/lib/NormalModuleMixin.js:206 throw e; ^ Error: Cannot find module 'jstransform/simple'``` 

这里的首选解决scheme是什么?

我可以在全球范围内安装我的装载机,但由于交叉项目问题,我不喜欢这样

我可以尝试从node_modules运行webpack(不知道怎么老实,把它添加到$PATH为每个项目?)

或者我可以尝试给我的全球webpack访问我的node_modules文件夹,这也似乎hacky。

我做错了什么,还是有更好的社区认可的方式来解决这个常见的问题?

我有一个名为“ pipe理每个项目的口译员”的博客文章和详细介绍我的方法的PATH 。 我将在这里总结一下你的一些关键问题。

这里的首选解决scheme是什么?

从来没有(真的,从字面上从不)使用npm -g 。 只需在您的项目中正常安装。 使用你的shell来适当地设置PATH。 我使用zsh自动执行此操作,详细信息请参见上面的博客文章,如果我使用./node_modules/.bin其放入项目中,它将自动放置在PATH中。

还有其他方法可以工作,包括alias webpack="./node_modules/.bin/webpack"等等。 但是,只要拥抱改变你的道路,你就会拥有最和谐的长期经验。 一个多项目开发人员的需求不符合旧学校unix所有生活在/ bin或/ usr /斌。

  • 如果您使用npm脚本( package.json的“脚本”键),则在这些脚本中,npm ./node_modules/.bin在您的PATH中自动包含./node_modules/.bin ,因此您只需运行命令即可find它们。 因此,使用npm脚本,如果您使用shell脚本,那么只需执行export PATH="$PWD/node_modules/.bin:$PATH"

任何在您的依赖项中定义的包附带的二进制文件都应该放在./node_modules/.bin下,所以您应该可以访问它们,例如: ./node_modules/.bin/webpack

或者,你可以在你的package.json定义一个脚本,这个脚本可以让你像npm run webpack那样npm run webpack一个别名。