我们平时看一些开源项目,可能会发现有些项目的package.json中scripts区定义的脚本非常复杂,让人眼花缭乱。事实上,这些剧本是有规律可循的。让我们从最简单的例子开始。新建一个空文件夹,执行命令npminit,该文件夹下会自动生成一个package.json。这个init其实就是一个向导,它会问你package.json中要生成的每个字段你要填什么值。一直按Enter以使用默认值。自动生成的package.json内容如下。我们现在对这个package.json做一个小的修改,来学习脚本的生命周期管理。{“名称”:“nodejsexample”,“版本”:“1.0.0”,“描述”:“”,“主要”:“index.js”,“脚本”:{“构建”:“nodeexample.js”"dev":"nodeexample.js","start":"nodeexample.js","prestart":"nodeexample.js","poststart":"nodeexample.js"},"author":"","license":"ISC"}关注9到11行,意思是npm执行命令时,如果执行了名为start的生命周期事件,则执行nodejs的命令nodeexample.js,如果a执行名为prestart的生命周期事件,执行nodejs命令nodeexample.js,poststart也是如此。然后我们来写example.js。为了简单起见,使用example.js同时响应prestart、start和poststart三个事件,所以在example.js中需要判断文件执行时处于哪个生命周期事件。这可以通过环境变量process.env.npm_lifecycle_event获得:constENVIRONMENT=process.env.npm_lifecycle_event;if(ENVIRONMENT==="build"){console.log("Runningyourbuildtasks!");}if(ENVIRONMENT==="dev"){console.log("运行开发服务器!");与}if(ENVIRONMENT==="prestart"){console.log("Prestartevent:PrepareforStartevent!");}if(ENVIRONMENT==="poststart"){console.log("Poststartevent:Dosomecleanuptask!");}if(ENVIRONMENT==="start"){console.log("RunningAppinproduction!");}现在执行命令行npmstart,可以看到对应的脚本事件prestart->start->poststart依次执行。package.json中所有脚本支持的事件在这个链接有详细定义:https://docs.npmjs.com/misc/s...更多Jerry原创技术文章,请关注公众号“汪子熙”或扫描下方二维码:
