关于 "scripts" 输入 package.json

about "scripts" key in package.json

谁能解释一下 package.json 文件中 "scripts" 键的用途。

在学习 Angular 2 时,我在 package.json 文件中遇到了以下脚本, 不确定这个密钥有什么用。

"scripts": {
"postinstall": "npm run typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"start": "concurrent \"node ./bin/www\" \"npm run tsc:w\"",
"typings" : "typings"
 }

参考这个,它会给你一个更好的主意script in package.json

scripts 键提供了一个方便的地方来定义项目特定的自动化脚本,就在您已​​经强制的 package.json 中。这有助于开发人员只需键入一些简单的内容,例如 npm run covernpm run deploy 并启动一系列可能很复杂的步骤(具有非常具体的文件位置或程序参数)。这避免了键入长命令行,并避免了错误。例如,我的一个项目包括这些命令:

"scripts": {
    "cover": "cd source/js/jutil && istanbul cover _mocha -- -R spec && open coverage/lcov-report/jutil/index.html",
    "test": "cd source/js/jutil && mocha",
    "deploy": "(git diff --quiet --exit-code --cached || git commit -a -m 'deploy') && git push heroku master && heroku open",
    "start": "gulp start"
}

我可以快速 运行 测试、覆盖率测试或部署到云主机,只需几句话,而无需记住详细的命令行选项或文件位置。

但是要小心。 JavaScript / node.js 社区对 "best" 或 "right" 定义此类自动化的地方存在很多争议。

许多开发人员更喜欢将自动化转移到单独的 "task runners" / "build systems",例如 gulp, grunt,甚至是好的 ole Unix make。对于这些项目,scripts 标签将为空或几乎为空。 (默认情况下,npm init 至少为 test 生成一个密钥。)相反,您需要查看他们的 gulpfile.jsGruntfileMakefile

其他开发人员拒绝成为构建系统机制的想法 and/or 分离构建配置。他们通常更喜欢将 "a few simple scripts" 直接放在 package.json 中,然后收工。

根据我的经验,"a few simple commands" 是一个很好的目标,但脚本的复杂性很快就会超过它。在具有许多不同资产和资产类型的大型项目中尤其如此,这些项目需要实时重建或实时重新加载,或者具有多个部署选项。我通常以 gulp 完成繁重的工作,但也许一些真正可以简明扼要地陈述的脚本仍然驻留在 package.json 中。 "Your mileage may vary."