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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2213295/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Tomcat生命週期管理Tomcat
- Salesforce 生命週期管理(一)應用生命週期淺談Salesforce
- ElasticSearch-生命週期管理Elasticsearch
- 神奇的npm -- scriptsNPM
- Elasticsearch索引生命週期管理方案Elasticsearch索引
- View生命週期與Activity生命週期的關係View
- Spring生命週期管理之總結Spring
- Elasticsearch ILM DSL 索引生命週期管理Elasticsearch索引
- PLM產品生命週期管理展望
- Flutter - 生命週期監聽和管理Flutter
- 最全面的 Bug 生命週期管理
- 生命週期
- viewController的生命週期ViewController
- Servlet的生命週期Servlet
- UIViewController的生命週期UIViewController
- Flutter 的生命週期Flutter
- Spring的生命週期Spring
- bean的生命週期Bean
- SQL的生命週期SQL
- Laravel的生命週期Laravel
- 類的生命週期
- akka-typed(1) - actor生命週期管理
- 元件生命週期管理和通訊方案元件
- vscode commitlint(debug npm scripts)VSCodeMITNPM
- npm package.json scriptsNPMPackageJSON
- 品牌生命週期和產品生命週期之間的關係
- vue - 生命週期Vue
- Fragment生命週期Fragment
- vue生命週期Vue
- spring生命週期Spring
- ubuntu生命週期Ubuntu
- Flutter - 生命週期Flutter
- sessionStorag 生命週期Session
- PHP 生命週期PHP
- maven生命週期Maven
- Activity生命週期
- React生命週期React
- React新的生命週期React