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

时间:2015-05-11 16:48:41

标签: 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"
}

当我运行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'```

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

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

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

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

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

2 个答案:

答案 0 :(得分:22)

我有一篇名为Managing Per-Project Interpreters and the PATH的博文,详细介绍了我的方法。我将在此总结一下您的一些关键问题。

  

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

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

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

  • 如果使用npm脚本(package.json中的“脚本”键),npm会在这些脚本中自动在PATH中包含./node_modules/.bin,这样您就可以运行命令并找到它们。因此,请使用npm脚本,如果您使用shell脚本,则可以轻松地执行export PATH="$PWD/node_modules/.bin:$PATH"

答案 1 :(得分:5)

依赖项中定义的包附带的任何二进制文件都应放在./node_modules/.bin下,因此您应该能够访问那里,即:./node_modules/.bin/webpack

或者,您可以在package.json中定义一个脚本,这样您就可以将npm run webpack作为别名运行。