使用npm,我们可以使用-g选项全局安装模块。我们如何在包装中做到这一点。json文件吗?

假设这些是我在包中的依赖项。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将全局安装,其余的其他应安装在本地。有其他选择吗?


当前回答

所有模块从包。Json被安装到。/node_modules/

我找不到明确的说明,但这是包。json引用NPM。

其他回答

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

使用npm install——save-dev [package_name]然后执行脚本: 运行lint 运行构建 $ NPM测试

以下是我最初但不推荐的回答。


而不是使用全局安装,你可以将包添加到你的devDependencies(——save-dev),然后从项目中的任何地方运行二进制文件:

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

在你的情况下:

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

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

虽然它会使每个调用更大一点,但它应该可以工作,防止:

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

缺点:

$(npm bin)在Windows上不起作用。 在你的开发树中较深的工具不会出现在npm bin文件夹中。(安装npm-run或npm-which来找到它们。)

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

所有模块从包。Json被安装到。/node_modules/

我找不到明确的说明,但这是包。json引用NPM。

新提示:您可能不想或不需要这样做。你可能想要做的就是把build/test等类型的命令依赖放在package.json的devDependencies部分。任何时候你使用包中的脚本。json你的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

注意:现在我们已经有了npx,它允许你运行devDependencies命令,而不需要将它们添加到你的脚本部分(如果你想的话)。 例如:

npx webpack

但是如果你真的想要全局安装,你可以在package.json的scripts部分添加一个preinstall:

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

所以实际上我的npm install再次执行npm install…这很奇怪,但似乎很有效。

注意:如果你正在使用最常见的npm设置,其中全局Node包安装需要sudo,你可能会遇到问题。一种选择是改变你的npm配置,这样就没有必要了:

npm配置~/npm,添加$HOME/npm/bin到$PATH,添加export PATH=$HOME/npm/bin:$PATH到~/.bashrc

另一个更好的选择是使用nvm来管理Node,这样就不会有这个问题了。

你可以使用一个单独的文件,比如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

至于你是否应该这样做,我认为这完全取决于用例。对于大多数项目,这是不必要的;拥有你的项目包。Json将这些工具和依赖项封装在一起是更可取的。

但现在我发现,当我跳上一台新机器时,我总是在全局安装create-react-app和其他CLI。当版本控制不太重要时,有一种简单的方法来安装一个全局工具及其依赖项是很好的。

现在,我使用npx,一个npm包运行器,而不是全局安装包。

这可能是生产中出现问题的原因。 如果项目依赖项安装在项目文件夹之外,如果其他人删除或替换你的包或更改文件夹权限,代码可能会中断。

将所有东西都放在一个文件夹中更持久,使系统更可预测,维护任务也更容易。