如何协调全局 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"
. 的地方
我的 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"
. 的地方