【问题标题】:How to reconcile global webpack install and local loaders如何协调全局 webpack 安装和本地加载器
【发布时间】:2016-01-26 18:08:05
【问题描述】:

我的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 文件夹,这看起来也很老套。

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

【问题讨论】:

    标签: node.js webpack


    【解决方案1】:

    我有一篇名为 Managing Per-Project Interpreters and the 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 中的“scripts”键),npm 会在这些脚本期间自动将 ./node_modules/.bin 包含在您的 PATH 中,因此您只需运行命令即可找到它们。因此,请使用 npm 脚本,如果您使用 shell 脚本,那么这很容易做到export PATH="$PWD/node_modules/.bin:$PATH"

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 它上面有足够多的标志,无论如何使用 npm 脚本定义确实符合人体工程学,所以我喜欢第二个选项。如果有更好的答案,我会等几分钟;-)
      猜你喜欢
      • 2017-07-02
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2019-09-19
      • 1970-01-01
      • 2015-02-07
      相关资源
      最近更新 更多