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

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

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

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

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

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

{

"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获得:

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

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

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

npm scripts的生命周期管理的更多相关文章

  1. Uber三代API 生命周期管理平台实现 Uber

    Uber三代API 生命周期管理平台实现 - InfoQ https://www.infoq.cn/article/H8Ml6L7vJGQz0efpWvyJ Uber 三代 API 生命周期管理平台实 ...

  2. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  3. 【转】Tomcat组件生命周期管理

    Tomcat组件生命周期管理 Tomcat中Server,Service,Connector,Engine,Host,Context,它们都实现了org.apache.catalina.Lifecyc ...

  4. Castle IOC容器组件生命周期管理

    主要内容 1.生命处理方式 2.自定义生命处理方式 3.生命周期处理 一.生命处理方式 我们通常创建一个组件的实例使用new关键字,这样每次创建出来的都是一个新的实例,如果想要组件只有一个实例,我们会 ...

  5. Java实现生命周期管理机制

    先扯再说 最近一直在研究某个国产开源的MySQL数据库中间件,拉下其最新版的代码到eclipse后,启动起来,然后做各种测试和代码追踪:用完想要关闭它时,拉出它的STOP类想要运行时,发现这个类里赫然 ...

  6. 6、Khala的登录生命周期管理

    khala能够对设备进行生命周期管理,并提供了与生命周期相关的接口,用户只需在具体的设备类型实现类中重写这些生命周期接口,即可享受khala对于生命周期管理的同时定制与业务相关的操作.具体接口解释如下 ...

  7. 依赖注入及AOP简述(十一)——生命周期管理 .

    2.     生命周期管理 各种依赖注入框架提供了替开发者管理各种Scope的便利功能,随之而来的就必然是被管理的依赖对象的生命周期管理的问题.所谓生命周期管理,就是一个对象在它所属的Scope中从被 ...

  8. Windows 8 动手实验系列教程 实验5:进程生命周期管理

    动手实验 实验5:进程生命周期管理 2012年9月 简介 进程生命周期管理对构建Windows应用商店应用的开发者来说是需要理解的最重要的概念之一.不同于传统的Windows应用(它们即使在后台仍然继 ...

  9. 快速构建Windows 8风格应用30-应用生命周期管理

    原文:快速构建Windows 8风格应用30-应用生命周期管理 引言 Windows 8 中可以启动多个应用并在其中切换,我们没有必要担心降低系统速度或消耗电池电量. 因为系统会自动挂起(有时会终止) ...

随机推荐

  1. Flutter实战视频-移动电商-26.列表页_使用Provide控制子类-2

    26.列表页_使用Provide控制子类-2 主要实现功能,点击一级分类,二级分类跟着变.这里主要用哦我们的provide 新建provide provide文件夹下创建:child_category ...

  2. UVa 1001 Say Cheese (Dijkstra)

    题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...

  3. Unresolved function or method require()

    1. 这是在JavaScript配置中没有node.js,去设置中配置就行了,方法如下: setting -> Languages&Frameworks -> Javascript ...

  4. Weekly Contest 78-------->808. Soup Servings

    There are two types of soup: type A and type B. Initially we have N ml of each type of soup. There a ...

  5. 51nod 1099【贪心】

    思路: 我们可以思考对于仅仅两个元素来说,A,B; 先选A的话是会  A.b+B.a; 先选B的话是会 B.b+A.a; 所以哪个小哪个就放前面; #include <cstdio> #i ...

  6. CodeForces 689C【二分】

    转自: http://blog.csdn.net/qq_26071477/article/details/51892995 #include<stdio.h> typedef long l ...

  7. Unity3D–Texture图片空间和内存占用分析

    Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大小和内存的占用情况都不了解.在此对于U3D的图片问题做一个实际数据的分析.此前的项目都会存 ...

  8. [Xcode 实际操作]一、博主领进门-(6)Xcode的iOS模拟器的基本使用方法

    目录:[Swift]Xcode实际操作 本文将演示Xcode的iOS模拟器的基本使用方法. 在项目导航区,鼠标右键[Assets.xcassets]资源文件夹. 隔壁右侧区域左下角点击[+],打开资源 ...

  9. css 所有选择器 实例与总结

    目录 什么是选择器? 选择器都有那些呢? 标签选择器 ID选择器 类选择器 后代选择器 子代选择器 组合选择器 交集选择器 相邻兄弟选择器 通用兄弟选择器 属性选择器 伪类选择器 什么是选择器? 在c ...

  10. hibernate错误总结2