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

How to reconcile global webpack install and local loaders

我的 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'```

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

我可以在全球范围内安装我的加载程序,但我不喜欢这样,因为存在跨项目问题

我可以尝试 运行 webpack out of node_modules(不确定如何说实话,将它添加到每个项目的 $PATH?)

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

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

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

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

我有一个名为 Managing Per-Project Interpreters and the PATH 的博客 post,其中详细介绍了我的方法。我将在这里总结一下,以解决您的一些关键问题。

What is the preferred solution here?

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

还有其他方法可以工作,包括制作 alias webpack="./node_modules/.bin/webpack" 等别名。但真的只是拥抱改变你的 PATH,你将拥有最和谐的长期体验。老派 unix 无法满足多项目开发人员的需求,一切都在 /bin 或 /usr/bin.

  • 如果您使用 npm 脚本(package.json 中的 "scripts" 键),npm 会在这些脚本期间自动将 ./node_modules/.bin 包含在您的 PATH 中,因此您可以 运行命令,它们就会被发现。因此,请使用 npm 脚本,如果您使用 shell 脚本,那是一个很容易做到 export PATH="$PWD/node_modules/.bin:$PATH".
  • 的地方