npm install和npm run build有什么区别?


113

npm install和之间有什么区别npm run build

我在项目中注意到,有时npm在npm install执行时会开始失败,但是在运行时npm run build,它可以正常工作。

如何这两个目标的内部运作,即installrun build不同?


1
到目前为止,公认的答案尚有争议。我认为,在此给定时间,MKP和CTS_AE的答案更为相关。在适当的尊重下,这应该在主持人和/或提出此问题的人的通知下进行。
Suhas Chikkanna

Answers:


69

npm install将依赖项安装到node_modules/您正在处理的节点项目的目录中。您可以调用install另一个node.js项目(模块),以将其安装为项目的依赖项。

npm run build是的别名npm build,除非您在package.json文件中指定“ build”的作用,否则它什么都不做。它使您可以在将其用于另一个项目之前,为项目执行任何必要的构建/准备任务。

build根据build的文档linkinstall命令调用:

这是npm link和npm install调用的管道命令。


37
Downvoted因为@MKP说,npm run buildnpm build一样的。如果您可以证明它们确实相同或更正您的答案,我会再次投票。
亨迪·爱侣湾

引用以下链接的正确答案后,我也认为npm buildnpm run build并不相同。恕我直言,也许@churro的上述答案需要更正。如果我错了,请纠正我。 stackoverflow.com/questions/29939697/...
苏哈斯奇纳

1
不幸的是,@ HendyIrawan是正确的,并且它们不是相同的命令,这是一个高度投票的答案,可能会使某些人困惑。我相信必须对其进行更新。
rdarioduarte

79

NPM 2019

npm build不复存在。您必须npm run build现在打电话。下面的更多信息。

TLDR;

npm install:安装依赖项,然后installpackage.json scripts字段调用。

npm run build:从package.json scripts字段运行构建字段。


NPM脚本字段

https://docs.npmjs.com/misc/scripts

您可以在npm package.json脚本字段中放入很多内容。在脚本的生命周期上方查看以上文档链接-大多数脚本具有钩子,您可以在安装,发布,卸载,测试,启动,停止,收缩包装,版本之前/之后运行脚本。


使事情复杂化

  • npm install 与...不同 npm run install
  • npm install安装package.json依赖项,然后运行package.json scripts.install
    • (基本上npm run install是在安装依赖项后调用。
  • npm run install仅运行package.json scripts.install不会安装依赖项
  • npm build曾经是有效的命令(以前与相同npm run build),但不再是;现在它是一个内部命令。如果运行它,您将得到:npm WARN build npm build called with no arguments. Did you mean to npm run-script build?您可以阅读有关文档的更多信息:https : //docs.npmjs.com/cli/build

5
+1但令人困惑的说法npm build是不再存在。从某种意义上说,它仍然是npm已知/特殊的,因为它会对您在底部提到的警告作出反应。从本质上讲,它现在什么也不做。这个对另一个问题的回答给出了npm buildvs 的最短总结npm run build
bluenote10 '19

1
换句话说,是时候检查纱线了吗?
松散的驼鹿

44

主要的区别是::

npm install是一个npm cli命令,它执行预定义的操作,即由Churro编写的命令,用于安装package.json中指定的依赖项

npm run 命令名npm run-script 命令名例如 npm run build)也是cli命令,它预定义为使用指定的名称来运行您的自定义脚本,而不是“ command-name”。因此,在这种情况下,npm run build是一个名为“ build”的自定义脚本命令,它将执行其中指定的任何操作(例如,下面示例package.json中给出的echo'hello world')。

注意事项::

1)再做一件事,npm build和Churro所写的npm run build是两种不同的事情npm build,但是npm run build会做内部编写的自定义工作package.json

2)与npm buildnpm run build不相同。我的意思是,您不能在自定义build(npm run build)脚本中指定某些内容,而期望npm build这样做。尝试以下操作在您的中进行验证package.json

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

然后一个接一个地运行npm run buildnpm build您将看到区别。有关命令的更多信息,请遵循npm文档

干杯!!


11
如果您不更详细地说明npm run build和之间的区别,我将不胜感激npm build。好吧,他们不一样,用什么方式?那么@Churro的答案不正确吗?
汉迪·爱侣湾

7
是的,那npm build仍然是个谜。很高兴知道这一点。据我所知,npm build将按照库罗的意愿去做”是不正确的。Churro说它将执行命令中指定package.json的操作build(如scripts我在本节中所定义)。但这就是这样npm run build做的,并且npm build不会运行本package.json scripts节中指定的build命令。除非有其他方法来定义中npm build应该做的事情,package.json否则Churro(在NPM文档中也没有,我很遗憾)没有对此进行解释。
trollkotze

2
因此,我尝试了一下,并npm build说不带参数调用了npm WARN build npm build。你是故意的npm run-script build吗?。我认为它什么也没做。花时间来阅读所有的答案在这里,并试图此我自己之后,我还不能告诉什么目的npm build:(。
bluenote10

4
  • npm install 将依赖关系安装在package.json配置中。
  • npm run build 运行脚本“ build”并创建一个脚本来运行您的应用程序-假设server.js
  • npm start 运行“开始”脚本,然后将其成为“ node server.js”

很难准确说明问题所在,但基本上,如果您查看脚本配置,我想“构建”使用某种构建工具来创建您的应用程序,而“开始”假定构建已完成,但如果失败,则失败该文件不存在。

您可能正在使用bower或grunt-我似乎记得一个典型的grunt应用程序将定义这些脚本以及一个“干净”脚本以删除最后一个版本。

生成工具倾向于在启动脚本随后调用的bin /,dist /或build /文件夹中创建文件-例如“ node build / server.js”。如果npm start失败,则可能是因为您调用npm clean或类似方法删除了最新版本,因此您的应用程序文件不存在,导致npm启动失败。

npm build的源代码(涉及该问题的讨论)在github中供您查看。如果您npm build直接运行并且定义了“构建”脚本,它将退出并出现错误,要求您调用构建脚本,npm run-script build因此该脚本与并不相同npm run script

我不太确定该怎么npm build做,但这似乎与依赖项中的安装后和打包脚本有关。我假设这可以确保下载软件包后,为特定环境构建依赖项所需的任何CLI构建脚本或本机库。这就是链接和安装调用此脚本的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.