如何协调全局webpack安装和本地加载器

Ale*_*Mcp 14 node.js 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"
}
Run Code Online (Sandbox Code Playgroud)

当我运行webpack它不在我的路径中所以它不显示为找到.我在全局安装它,npm install -g webpack所以二进制文件将出现在我的路径中,但是它找不到安装的加载器模块./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'```
Run Code Online (Sandbox Code Playgroud)

这里的首选解决方案是什么?

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

我可以尝试从node_modules运行webpack(不确定如何诚实,$PATH为每个项目添加它?)

或者我可以尝试将我的全局webpack访问到我的node_modules文件夹,这看起来也很糟糕.

我做错了什么,或者是否有一个更好的社区认可的方式解决这个可能的常见问题?

Pet*_*ons 24

我有一篇名为Managing Per-Project Interpreters和PATH的博客文章详细介绍了我的方法.我将在这里总结一下你的一些关键问题.

这里的首选解决方案是什么?

从来没有(真的,从字面上从不)使用npm -g.只需在项目中正常安装即可.使用shell适当地设置PATH.我使用zsh自动执行此操作,如上面的博客文章中详述的那样,如果我cd进入项目./node_modules/.bin,它会自动放在我的PATH上.

还有其他方法可以工作,包括制作别名alias webpack="./node_modules/.bin/webpack"等等.但真的只是拥抱改变你的PATH,你将获得最和谐的长期体验.旧学校unix无法满足多项目开发人员的需求,所有内容都位于/ bin或/ usr/bin中.

  • 如果您使用npm脚本(您的"脚本"键package.json),npm会./node_modules/.bin在这些脚本中自动包含在您的PATH中,这样您就可以运行命令并找到它们.因此,使用npm脚本,如果你使用shell脚本,这是一个容易做到的地方export PATH="$PWD/node_modules/.bin:$PATH".


Mat*_*ins 6

任何与依赖项中定义的包一起提供的二进制文件都应置于其下./node_modules/.bin,因此您应该能够访问它,即:./node_modules/.bin/webpack.

或者,您可以在您的内部定义一个脚本package.json,这样您就可以像运行npm run webpack别名一样运行.