使用package.json在全局和本地安装依赖项

使用npm,我们可以使用-goption 在全局安装模块我们如何在package.json文件中执行此操作?

假设这些是我在package.json文件中的依赖项

"dependencies": {
    "mongoose": "1.4.0",
    "node.io" : "0.3.3",
    "jquery"  : "1.5.1",
    "jsdom"   : "0.2.0",
    "cron"    : "0.1.2"
  }

当我运行时npm install,我只想node.io全局安装,其余的应该本地安装。有这个选项吗?

十三斯丁Jim2020/03/24 09:44:11

package.json中的所有模块都安装到./node_modules/

我找不到明确说明的内容,但这是NPM的package.json参考

西门2020/03/24 09:44:11

由于以下缺点,我建议您遵循公认的答案:

在以下情况下使用npm install --save-dev [package_name]然后执行脚本:

$ npm run lint
$ npm run build
$ npm test

我的原始但不建议的答案如下。


您可以将包添加到devDependencies--save-dev)中,然后从项目内部的任何位置运行二进制文件,而不是使用全局安装

"$(npm bin)/<executable_name>" <arguments>...

在您的情况下:

"$(npm bin)"/node.io --help

该工程师提供了npm-exec别名作为快捷方式。 该工程师使用称为的shellscript env.sh但是我更喜欢$(npm bin)直接使用,以避免任何额外的文件或设置。

尽管它使每个调用都大一点,但它应该可以正常工作,可以防止:

  • 与全局包的潜在依赖冲突(@nalply)
  • 需要 sudo
  • 需要设置一个npm前缀(尽管我还是建议使用一个)

缺点:

  • $(npm bin) 在Windows上将无法使用。
  • 开发树中较深的工具不会出现在该npm bin文件夹中。(安装npm-runnpm-可以找到它们。)

似乎更好的解决方案是将常见任务(例如构建和缩小)放在您的“脚本”部分package.json,如Jason上面演示的那样。

猪猪2020/03/24 09:44:11

您可以使用单独的文件,例如npm_globals.txt,而不是package.json该文件将在每个新行中包含每个模块,如下所示:

mongoose@1.4.0
node.io@0.3.3
jquery@1.5.1
jsdom@0.2.0
cron@0.1.2

然后在命令行中运行

< npm_globals.txt xargs npm install -g

检查它们是否正确安装,

npm list -g --depth=0

至于是否应该执行此操作,我认为这完全取决于用例。对于大多数项目,这不是必需的。并且最好将您的项目package.json将这些工具和依赖项封装在一起。

但是如今,我发现,create-react-app当我跳到新机器上时,我总是在全球范围内安装CLI和其他CLI。当版本控制无关紧要时,有一种简单的方法可以很好地安装全局工具及其依赖项。

而如今,我使用npx一包NPM亚军,而不是全球安装软件包。

伽罗理查德2020/03/24 09:44:11

新说明:您可能不需要或不需要这样做。您可能想要做的就是将那些用于构建/测试等命令依赖性的类型放在devDependenciespackage.json 部分中。 每当您在package.json中使用某些内容时scripts,您的devDependencies命令(在node_modules / .bin中)就好像它们在您的路径中一样。

例如:

npm i --save-dev mocha # Install test runner locally
npm i --save-dev babel # Install current babel locally

然后在package.json中:

// devDependencies has mocha and babel now

"scripts": {
  "test": "mocha",
  "build": "babel -d lib src",
  "prepublish": "babel -d lib src"
}

然后在命令提示符下运行:

npm run build # finds babel
npm test # finds mocha

npm publish # will run babel first

但是,如果您确实要全局安装,则可以在package.json的脚本部分中添加预安装:

"scripts": {
  "preinstall": "npm i -g themodule"
}

所以实际上我的npm install再次执行npm install ..这很奇怪,但似乎可以工作。

注意:如果使用最常见的安装npm程序来安装全局Node软件包,则可能会有问题sudo一种选择是更改npm配置,因此这不是必需的:

npm config set prefix ~/npm,通过将$ HOME / npm / bin附加export PATH=$HOME/npm/bin:$PATH$ PATH来将其添加$ PATH中~/.bashrc