使用npm,我们可以使用-g
选项全局安装模块。我们如何在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
,其余的都应该本地安装。有没有这样的选项?
7条答案
按热度按时间hm2xizp91#
**新注解:**您可能不想或不需要这样做。您可能想做的是将构建/测试等的这些类型的命令依赖项放在package.json的
devDependencies
部分中。任何时候您使用package.json中scripts
中的内容时,您的devDependencies命令(在node_modules/.bin中)的行为就像它们在您的路径中一样。例如:
接着又在包强生身上:
然后,在命令提示符下,您可以运行:
新的新笔记:现在我们已经有了
npx
,它允许你运行devDependencies命令,而不需要将它们添加到你的scripts
部分(如果你愿意)。例如:所以实际上我的npm安装再次执行npm安装..这很奇怪,但似乎有效。
**注意:**如果您使用的是
npm
的最常见安装,其中全局节点包安装了所需的sudo
,则可能会遇到问题。一个选项是更改您的npm
配置,这样就不需要这样做了:npm config set prefix ~/npm
,通过将export PATH=$HOME/npm/bin:$PATH
附加到您的~/.bashrc
,将$HOME/npm/bin添加到$PATH。另一个可能更好的选择是只使用
nvm
来管理节点,这样就不会有这个问题。rta7y2nd2#
鉴于下述缺点,我建议遵循可接受的答案:
使用
npm install --save-dev [package_name]
,然后使用以下命令执行脚本:我的原创但不推荐答案如下。
您可以将软件包添加到
devDependencies
(--save-dev
)中,然后从项目中的任意位置运行二进制文件,而不是使用全局安装:在您的情况下:
这个工程师提供了一个
npm-exec
别名作为快捷方式。这个工程师使用了一个名为env.sh
的shell脚本。但是我更喜欢直接使用$(npm bin)
,以避免任何额外的文件或设置。虽然它会使每个调用稍大一些,但它***应该只是起作用***,防止:
sudo
的需求缺点:
$(npm bin)
无法在Windows上运行。npm bin
文件夹中。(安装npm-run或npm-which可以找到它们。)看起来一个更好的解决方案是将常见任务(如构建和缩小)放在
package.json
的“scripts”部分,如上面的Jason所演示的。tpxzln5u3#
这是一个有点老,但我遇到了要求,所以这里是我想出的解决方案。
问题:
我们的开发团队维护着许多.NET Web应用程序产品,我们正在将其迁移到AngularJS/Bootstrap。VS2010并不适合于自定义构建过程,我的开发人员经常在我们产品的多个版本上工作。我们的VCS是Subversion(我知道,我知道。我正在尝试转移到Git,但我讨厌的营销人员是如此苛刻)和一个单一的VS解决方案将包括几个独立的项目。我需要我的员工有一个通用的方法来初始化他们的开发环境,而不必在同一台机器上多次安装相同的节点包(gulp、bower等)。
TL;DR:
1.需要“npm install”来安装全局Node/Bower开发环境以及.NET产品所需的所有本地软件包。
1.只有在尚未安装全局软件包时,才应安装全局软件包。
1.必须自动创建指向全局程序包的本地链接。
解决方案:
我们已经有了一个所有开发人员和所有产品共享的通用开发框架,因此我创建了一个NodeJS脚本,以便在需要时安装全局包并创建本地链接。该脚本位于相对于产品基本文件夹的“....\SharedFiles”中:
现在,如果我想为我们的开发人员更新一个全局工具,我会更新“packages”对象并签入新脚本。我的开发人员 checkout 它,然后使用“node npm-setup.js”或“npm install”从任何正在开发的产品中运行它,以更新全局环境。整个过程需要5分钟。
此外,要为新开发人员配置环境,他们必须首先只安装NodeJS和GIT for Windows,重新启动计算机,检查“共享文件”文件夹和任何正在开发的产品,然后开始工作。
.NET产品的“package.json”在安装之前调用此脚本:
备注
2016年1月29日编辑
上面更新的
npm-setup.js
脚本已修改如下:var packages
中的软件包“version”现在是在命令行中传递给npm install
的“package”值。这一点已更改为允许从注册的系统信息库以外的其他位置安装软件包。axkjgtzd4#
您可以使用一个单独的文件,如
npm_globals.txt
,而不是package.json
。然后在命令行中运行、
检查它们是否正确安装,
至于你是否应该这样做,我认为这完全取决于用例,对于大多数项目来说,这是没有必要的;并且让项目的
package.json
将这些工具和依赖项封装在一起是更好的选择。但是现在我发现当我在一台新机器上运行时,我总是在全局安装
create-react-app
和其他CLI。当版本控制不太重要时,有一个简单的方法来安装全局工具及其依赖项是很好的。现在,我使用
npx
,an npm package runner,而不是全局安装软件包。t2a7ltrp5#
构建您自己的脚本来安装全局依赖项。这并不需要太多。package.json是相当可扩展的。
使用上面的,你甚至可以使它内联,下面!
请看下面的预安装:
节点的作者可能不承认package.json是一个项目文件,但它确实是。
pgvzfuti6#
package.json中的所有模块都安装到./node_modules/中
我找不到明确说明,但这是NPM的package.json参考。
gorkyyrv7#
如果项目依赖项安装在项目文件夹之外,如果其他人删除或替换您的包或更改文件夹权限,代码可能会中断。
将所有内容都放在一个文件夹中更耐用,并使系统可预测和维护任务更容易。