使用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将全局安装,其余的其他应安装在本地。有其他选择吗?
由于以下所述的缺点,我建议遵循以下公认的答案:
使用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在上面演示的那样。
新提示:您可能不想或不需要这样做。你可能想要做的就是把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包运行器,而不是全局安装包。