npm脚本概念npm允许使用package.json文件中的scripts字段定义脚本:{//..."scripts":{"build":"nodebuild.js"}}执行脚本:$npmrunbuild查看所有可用脚本:$npmrunscript执行原理每当执行npmrun时,该命令会自动创建一个新的shell,并在这个shell中执行指定的脚本命令。所以,只要是Shell可以运行的命令,都可以写在npm脚本中。npmrun会将当前目录的node_modules/.bin子目录添加到PATH变量中,然后执行后将PATH变量恢复到原来的状态。因此,node_modules/.bin子目录下的所有脚本都可以直接使用脚本名调用,无需添加路径。npm脚本的唯一要求是在shell中可执行,因此它不必是Node脚本,任何可执行文件都可以写入其中。脚本通配符"lint":"jshint*.js""lint":"jshint**/*.js"上面代码中,*表示任意文件名,**表示任意一级子目录。脚本参数传递——后面的内容将原样传递给命令。$npmruncommand1--param或者封装另一个命令:"command1":"nodetest.js","command2":"npmruncommand1--param"$npmruncommand2并行执行:$npmrunscript1.js&npmrunscript2.js串行执行:$npmrunscript1.js&&npmrunscript2.js默认脚本npm提供了两个默认脚本,这两个脚本不需要定义,直接使用即可:"start":"nodeserver.js""install":"node-gyprebuild"脚本钩子npm脚本有两个钩子,pre和post。例如,构建脚本命令的挂钩是预构建和后构建。"prebuild":"echoIrunbeforethebuildscript","build":"cross-envNODE_ENV=productionwebpack","postbuild":"echoIrunafterthebuildscript"当用户执行npmrunbuild时,它会按照下面的顺序自动执行。npmrunprebuild&&npmrunbuild&&npmrunpostbuild因此,可以在这两个钩子中做一些准备工作和清理工作。默认情况下,npm提供以下钩子prepublish、postpublishpreinstall、postinstallpreuninstall、postuninstallpreversion、postversionpretest、posttestprestop、poststopprestart、poststartprerestart和postrestart速记。四种常用的npm脚本都有简写形式。npmstart是npmrunstart的缩写npmstop是npmrunstop的缩写npmtest是npmruntest的缩写npmrestart是npmrunstop的缩写&&npmrunrestart&&npmrunstart包变量以npm_package_为前缀,npmscripts可以获取package.json中的字段。比如下面是一个package.json。{"name":"foo","version":"1.2.5","scripts":{"view":"nodeview.js"}}//view.jsconsole.log(process.env.npm_package_name);//fooconsole.log(process.env.npm_package_version);//1.2.5通过环境变量process.env对象,可以获取到package.json的字段值。如果是Bash脚本,可以使用$npm_package_name和$npm_package_version来获取这两个值。npm_package_前缀还支持嵌套的package.json字段。"repository":{"type":"git","url":"xxx"},scripts:{"view":"echo$npm_package_repository_type"}可以通过npm_package_repository_type获取repository字段的type属性。config配置变量npm脚本还可以通过npm_config_前缀获取npm配置变量,即npmconfiggetxxx命令返回的值。例如可以通过npm_config_tag获取当前模块的releasetag。“视图”:“回显$npm_config_tag”,
