Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1342707
  • 博文数量: 932
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 10208
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-08 12:28
文章分类

全部博文(932)

文章存档

2021年(1)

2020年(134)

2019年(792)

2018年(5)

我的朋友

分类: 架构设计与优化

2019-08-26 21:44:00

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

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

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

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

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

我们现在对这个package.json进行少量修改,以此来学习scripts的生命周期管理(lifecycle management)。

{ "name": "nodejs example", "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获得:

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的事件在这个链接里详细定义了:

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


阅读(863) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~