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

npm installnpm run build之间的区别是什么?

我注意到在我的项目中,有时npm在npm install执行时开始失败,但是,在运行npm run build时,它工作得很好。

installrun build这两个目标的内部工作原理有什么不同?

459926 次浏览

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

npm run build什么都不做,除非你指定什么&;build&;在你的包里。json文件。它可以让您执行任何必要的构建/准备任务,为您的项目,在它被用于另一个项目之前。

npm build是一个内部命令,由linkinstall命令调用,根据构建文档:

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

你通常不会调用npm build,因为它在内部使用Node -gyp来构建原生C/ c++ Node插件。

主要区别是:

__ABC0是一个npm cli命令,它做预定义的事情,即由Churro编写,安装package.json中指定的依赖项

npm run %command-name%npm run-script %command-name%也是一个预定义的cli命令,用于运行您的自定义脚本,使用指定的名称来代替“命令-名称”。因此,在本例中,npm run build是一个自定义脚本命令,名称为"build"并将执行它内部指定的任何操作(例如下面的例子package.json中给出的echo 'hello world')。

注意事项:

  1. 还有一件事,npm buildnpm run build是两个不同的东西,npm run build将执行自定义工作,而npm build是一个预定义的脚本(不能直接使用)。

  2. 你不能在自定义构建脚本(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文档

  • npm install在包中安装依赖项。json配置。
  • npm run build运行脚本“build”并创建了一个运行应用程序的脚本——让我们说server.js
  • npm start运行“开始”脚本,然后是“node server.js”

很难确切地说问题是什么,但基本上如果你看看你的脚本配置,我猜“build”使用某种构建工具来创建你的应用程序,而“start”假设构建已经完成,但如果文件不存在,就会失败。

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

构建工具倾向于在bin/, dist/或Build /文件夹中创建一个文件,然后开始脚本调用该文件。“节点构建/ server.js”。当你的npm start失败时,很可能是因为你调用了npm clean或类似的方法来删除最新的构建,所以你的应用程序文件不存在,导致npm启动失败。

NPM构建的源代码-涉及到这个问题的讨论-在github中,如果你喜欢可以看看。如果你直接运行npm build,并且你定义了一个“构建”脚本,它将退出,并提示你将构建脚本调用为npm run-script build,因此它与npm run script不同。

我不太确定npm build做什么,但它似乎与postinstall和打包脚本有关。我认为这可能是为了确保在下载包后为特定的环境构建依赖项所需的任何CLI构建脚本或本机库。这就是为什么link和install调用这个脚本的原因。

2019年的NPM

npm build不再存在。你现在必须调用npm run build。更多信息如下。

TLDR;

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

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


NPM脚本字段

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

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


把事情复杂化

  • npm installnpm 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/buildhttps://docs.npmjs.com/cli/v6/commands/npm-build

额外的笔记

仍然有两个顶级命令将运行脚本,它们是:

  • npm start,与npm run start相同
  • npm test = =比;npm run test