npm scripts的生命周期管理

咱们平时阅读一些开源项目,可能会发现有些项目的package.json里的scripts区域定义的脚本很复杂,使人眼花缭乱。javascript

其实这些脚本是有规律可循的。让咱们从最简单的一个例子开始学习。java

新建一个空文件夹,执行命令npm init,会自动在该文件夹下生成一个package.json。node

这个init实际上是一个向导,会针对package.json里待生成的每个字段询问您想填什么值。一路回车,使用默认值便可。npm

自动生成的package.json内容以下。json

咱们如今对这个package.json进行少许修改,以此来学习scripts的生命周期管理(lifecycle management)。post

{

"name": "nodejsexample",

"version": "1.0.0",

"description": "",

"main": "index.js",

"scripts": {

"build": "node example.js",

"dev": "node example.js",

"start": "node example.js",

"prestart": "node example.js",

"poststart": "node example.js"

},

"author": "",

"license": "ISC"

}

重点看第9行~第11行,意思就是当npm执行命令时,若是执行到名为start的生命周期事件(lifecycle event),则执行nodejs的命令node example.js,若是执行到名为prestart的生命周期事件, 则执行nodejs命令node example.js,对于poststart也同理。学习

而后咱们再来编写example.js。为了简单起见,用example.js同时响应prestart, start和poststart三个事件,所以在example.js里须要判断当该文件执行时,到底所处哪一个生命周期事件。这个能够用环境变量process.env.npm_lifecycle_event得到:ui

const ENVIRONMENT = process.env.npm_lifecycle_event;

if (ENVIRONMENT === "build") {

      console.log("Running your build tasks!");

}

if ( ENVIRONMENT === "dev") {

       console.log("Running the dev server!");同

}

if ( ENVIRONMENT === "prestart") {

      console.log("Prestart event: Prepare for Start event!");

}

if ( ENVIRONMENT === "poststart") {

      console.log("Poststart event: Do some cleanup task!");

}

if ( ENVIRONMENT === "start") {

      console.log("Running App in production!");

}

如今执行命令行npm start,能够看到依次执行了事件prestart->start->poststart对应的script。命令行

package.json里全部支持写script的事件在这个连接里详细定义了:3d

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

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

相关文章
相关标签/搜索