zoukankan      html  css  js  c++  java
  • npm scripts的生命周期管理

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

  • 相关阅读:
    02-01官网静默模式安装WebLogic
    01-java技术体系基础
    MySQL安装的三种方式
    centos虚拟机初始化脚本
    Nginx编译配置介绍
    word发布博客至博客园
    Bash shell编程的语法知识点(1)
    c=$[$c%5]到let c=$c%5的转换
    <转>shell经典,shell十三问
    进程管理工具htop/glances/dstat的使用
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9818866.html
Copyright © 2011-2022 走看看