我的package.json文件(缩短版)中有这个:
{
"name": "a-module",
"version": "0.0.1",
"dependencies": {
"coffee-script": ">= 1.1.3"
},
"devDependencies": {
"stylus": ">= 0.17.0"
}
}
我在Mac 10.6.8上使用NPM版本1.1.1。
当我从项目根目录运行以下命令时,它会同时安装dependencies
和 devDependencies
:
npm install
我的印象是这个命令安装了devDependencies
:
npm install --dev
如何使npm install
仅安装dependencies
(因此生产环境仅获取这些模块),而npm install --dev
之类的内容同时安装dependencies
和{{1} }}?
答案 0 :(得分:725)
npm install
命令将在开发环境(默认设置)中的包目录内运行时在其他devDependencies
上安装dependencies
。
使用npm install --only=prod
(或--only=production
)安装 dependencies
,而不是devDependencies,
,无论NODE_ENV
的值如何环境变量。
来源:npm docs
注意:在npm(2015-08-13)的v3.3.0之前,该选项名为--production
,即npm install --production
。
答案 1 :(得分:212)
我也遇到了这个问题! npm install有些令人困惑,Web帖子继续引入-d / - dev标志,好像有一个明确的'开发'安装模式。
npm install
将同时安装“依赖项”和“ devDependencies ”
npm install --production
只会安装“依赖”
npm install --dev
只会安装“ devDependencies ”
答案 2 :(得分:123)
新选项是:
npm install --only=prod
如果您只想安装devDependencies:
npm install --only=dev
答案 3 :(得分:40)
如果您在2016年阅读此POST,请使用
达到您想要的效果--only={prod[uction]|dev[elopment]}
无论NODE_ENV如何,参数都会导致只安装devDependencies或者只安装非devDependencies。
答案 4 :(得分:23)
如果您已经安装了所有依赖项,并且希望避免再次从NPM下载生产包,则只需键入:
var data = {
"id": "123",
"members": [
{ "id": 1, "name": "Andrew" },
{ "id": 2, "name": "Jim" }
]
};
var result = data.members.map(function (e) {
return e.name;
}).join(', ');
console.log(result);
这将从您的npm prune --production
文件夹中删除您的开发依赖项,如果您尝试自动执行两步过程(例如
在其间运行node_modules
将使您无需重新安装所有内容!
答案 5 :(得分:18)
使用“npm install”时,模块会在整个应用程序中加载并可用,无论它们是“devDependencies”还是“依赖项”。这个想法的总和:package.json定义为依赖项(任何类型)的所有内容都安装到node_modules。
依赖项/ devDependencies / optionalDependencies之间差异的目的是代码的使用者可以用n / n来安装这些资源。
根据文档:https://npmjs.org/doc/json.html ...
如果有人计划下载和使用您的模块 程序,然后他们可能不想或不需要下载和构建 您使用的外部测试或文档框架。
在这种情况下,最好在a中列出这些附加项目 devDependencies哈希。
只要--dev配置标志,就会安装这些东西 已设定。执行npm链接或何时自动设置此标志 从包的根目录进行npm安装,并且可以像管理一样进行管理 任何其他npm配置参数。有关详细信息,请参阅config(1) 主题。
但是,要解决此问题,如果您只想使用npm安装“依赖项”,则以下命令为:
npm install --production
这可以通过查看添加了此过滤器的Git提交(以及下面列出的一些其他过滤器来提供此功能)来确认。
npm可以使用的替代过滤器:
--save => updates dependencies entries in the {{{json}}} file
--force => force fetching remote entries if they exist on disk
--force-latest => force latest version on conflict
--production => do NOT install project devDependencies
--no-color => do not print colors
@dmarr尝试使用npm install --production
答案 6 :(得分:15)
npm将在从包内部安装时安装dev依赖项(如果当前目录中有package.json
)。如果它来自另一个位置(npm注册表,git repo,文件系统上的不同位置),它只安装依赖项。
答案 7 :(得分:6)
我建议使用npm ci
。如果您只想安装生产所需的软件包(如您所写-没有devDependencies
),则:
npm ci --only=production
或
NODE_ENV=production npm ci
如果您更喜欢老式的npm install
,则:
npm install --production
或
NODE_ENV=production npm install
Here is good answer为什么要使用npm ci
。
答案 8 :(得分:2)
我发现,在尝试为包含节点插件的软件包安装dev依赖项时,即使您只是想安装devDependencies,也无法避免在运行npm install --dev时构建插件。所以,我不得不绕着npm回来:
#container
或者,更好(也更简洁),
node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install
答案 9 :(得分:2)
需要添加到所选答案:截至目前,程序包目录中的npm install
(包含package.json
)将安装devDependencies,而npm install -g
将不会安装它们。
答案 10 :(得分:2)
使用npm install packageName --save
这将在依赖关系中添加包,如果您使用npm install packageName --save-dev
,那么 devDependencies 。
npm install packageName --save-dev
应该用于添加包以用于开发目的。就像添加TDD包(Chai,mocha等)一样。哪些用于开发而非生产。
答案 11 :(得分:1)
值得一提的是,您可以使用NODE_ENV
环境变量来获得相同的结果。如果您对Node应用程序(例如Docker)进行容器化,则特别有用。
NODE_ENV=production npm install
上面的代码将安装所有依赖项,但是安装dev(即devDependencies
)。
如果您需要在Dockerfile
中使用环境变量,可以找到更多信息here。
环境变量很容易在需要时覆盖(例如,如果您想在Travis CI上运行测试套件)。如果是这种情况,你可以这样做:
docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install
生产
- 默认值:false
类型:布尔值 设置为true以运行"生产"模式。
- 在没有任何参数的情况下运行本地npm安装时,devDependencies不会安装在最顶层。
- 设置NODE_ENV ="制作" for lifecycle scripts。
快乐的集装箱化 =)
答案 12 :(得分:1)
现在有一个问题,如果你有一个npm 5+的package-lock.json。您必须在使用func updateAllRecords(responseArray: [Dictionary<String, String>])
{
for settingsObject in responseArray
{
var dic2 = ["IS_CIVIL_ID_MANDATORY": "xyz", "TIME_IN_MIN_BEFORE_ENABLING_START_TRIP": "xyz"]
let keys = settingsObject.flatMap() {$0.0}
let values = settingsObject.flatMap(){$0.1}
let settingKeys = dic2.flatMap() {$0.0}
for settingsKey in settingKeys
{
dic2.updateValue(settingsObject[settingsKey]!, forKey: settingsKey)
}
print(keys)
print(dic2)
}
}
var dicArray = [Dictionary<String, String>]()
let dic1 = ["IS_CIVIL_ID_MANDATORY": "Smith", "TIME_IN_MIN_BEFORE_ENABLING_START_TRIP": "Robert"]
dicArray.append(dic1)
updateAllRecords(responseArray: dicArray)
之前将其删除。
答案 13 :(得分:0)
npm install --dev will install dev dependencies
并且,按照仅安装依赖项的问题,以下命令将提供帮助
npm install --prod will install dependencies
答案 14 :(得分:0)
我在docker节点中遇到了一个问题:current-slim(运行npm 7.0.9),其中npm install
似乎忽略了--production
,--only=prod
和--only=production
。我发现了两种解决方法:
RUN npm ci --only=production
),它需要最新的package-lock.json npm install
之前,使用以下命令残酷地编辑package.json: RUN node -e 'const fs = require("fs"); const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")); delete pkg.devDependencies; fs.writeFileSync("./package.json", JSON.stringify(pkg), "utf-8");'
这不会编辑您的工作package.json,只是将其复制到docker容器中。 当然,这不是必须的,但是如果是这样(对我而言),那就是您的hack。
答案 15 :(得分:-1)
npm install --production
是安装生产所需的节点模块的正确方法。查看文档以获取更多详细信息
答案 16 :(得分:-1)
npm install --production --no-optional
它只安装来自 dependencies
的 deps 并且会忽略 optionalDependencies
和 devDependencies