2019独角兽企业重金招聘Python工程师标准>>>

我们平时阅读一些开源项目,可能会发现有些项目的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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

转载于:https://my.oschina.net/u/3771578/blog/2250130

npm scripts的生命周期管理相关推荐

  1. Kubernetes CKA认证运维工程师笔记-Kubernetes应用程序生命周期管理

    Kubernetes CKA认证运维工程师笔记-Kubernetes应用程序生命周期管理 1. 在Kubernetes中部署应用流程 2. 使用Deployment部署Java应用 2.1 Pod与D ...

  2. Elasticsearch索引生命周期管理方案

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一.前言 在 Elasticsearch 的日常中,有很多 ...

  3. 容器,对象生命周期管理的基石

    2019独角兽企业重金招聘Python工程师标准>>> 郑重申明:包括本文在内的很多技术文章,大多出自山外高人,而非Fans. Fans暂时没有能力写作优秀的技术文章,Fans只是转 ...

  4. 敏捷SOA成功秘诀(三):生命周期管理

    本节主要介绍SOA如何逐渐融入敏捷的生命周期.在这里,我们将研究一下应用生命周期管理(ALM). 正如著名市场研究机构Forrester的Cary Schwaber所说的那样,最新的ALM平台将会改善 ...

  5. 大数据将改变信息生命周期管理

    时至今日,虽然信息生命周期管理(ILM)这个概念不再被常常提及,但是ILM的理念已经深入人心,成了指导企业用户实施数据分层存储及管理的核心原则.昆腾公司全球大数据业务高级副总裁Janae Lee表示: ...

  6. 自定义Unity对象生命周期管理集成ADO.NET Entity Framework

    在Unity中,从Unity 取得的实例为 Transient.如果你希望使用多线程方式,就需要在组成时使用lifecycle参数,这时候取出的组件就不再是同一个了.在Unity IOC中,它支持我们 ...

  7. RxJava 教程第一部分:入门之 生命周期管理

    原文出处:http://blog.chengyunfeng.com/?p=954#ixzz4KaYiN2oT Rx 背后的理念是:无法知道事件流何时发射数据.也不知何时结束发射,但是你需要控制何时开始 ...

  8. 组件生命周期管理和通信方案

    随着移动互联网的快速发展,项目的迭代速度越来越快,需求改变越来越频繁,传统开发方式的工程所面临的一些,如代码耦合严重.维护效率低.开发不够敏捷等问题就凸现了出来.于是越来越多的公司开始推行" ...

  9. 存储知识:数据一致性、分级存储、分层存储与信息生命周期管理

    一.概述 数据一致性是指关联数据之间的逻辑关系是否正确和完整.问题可以理解为应用程序自己认为的数据状态与最终写入到磁盘中的数据状态是否一致.比如一个事务操作,实际发出了五个写操作,当系统把前面三个写操 ...

最新文章

  1. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
  2. -bash: ./demoapp: 无法执行二进制文件 问题解决
  3. .NetCore Cap 结合 RabbitMQ 实现消息订阅
  4. C#数组原来这么简单,你学废了吗?
  5. recovery编译问题汇总
  6. Overload重載和Override重写的区别。Overloaded的方法是否可以改变返回值的类型?
  7. FTP协议、电子邮件系统与Telnet远程控制
  8. python pip清华源安装库
  9. bzoj 3385: [Usaco2004 Nov]Lake Counting 数池塘(DFS)
  10. 计算机教室戴尔电脑网络同传,DELL商用台式电脑如何作网络同传
  11. arduino烧录_如何给AVR单片机烧录程序
  12. java提取省市县乡镇村
  13. 标准正态分布表(scipy.stats)
  14. 映美精两个相机同步采集求助
  15. 和讯博客知名博主《猎杀黑马》作者王宁签售会圆满结束
  16. Python调用腾讯优图OCR通用API实现文字识别
  17. 米转经纬度_经纬度换算米(经纬度精度换算米数)
  18. 记录笔记时得到的人生的两个道理
  19. Ubuntu16.04创建用户时指定工作目录
  20. Java小白踩坑录 - Shadowing Obscuring 揭秘

热门文章

  1. 使用Docker的macvlan为容器提供桥接网络及跨主机通讯
  2. PHP获取客户端真实IP的自定义函数
  3. Oracle RAC 常用维护工具和命令
  4. Object-C代码练习【自定义对象的归档】
  5. Dojo学习13 dijit.Tree 动态添加节点之一
  6. WebClient.UploadValues Post中文乱码的解决方法
  7. 推荐一些算法方面的好书
  8. mysql数据库oem_Oracle 11gR2学习之二(创建数据库及OEM管理篇)
  9. jquery 添加 padding_【开发小技巧】11—如何使用JavaScript / jQuery为网站创夜间/高亮模式?...
  10. matlab中卡尔曼滤波,卡尔曼滤波器和matlab代码.doc