咱們平時閱讀一些開源項目,可能會發現有些項目的package.json裏的scripts區域定義的腳本很複雜,使人眼花繚亂。javascript
其實這些腳本是有規律可循的。讓咱們從最簡單的一個例子開始學習。java
新建一個空文件夾,執行命令npm init,會自動在該文件夾下生成一個package.json。node
這個init實際上是一個嚮導,會針對package.json裏待生成的每個字段詢問您想填什麼值。一路回車,使用默認值便可。npm
自動生成的package.json內容以下。json
咱們如今對這個package.json進行少許修改,以此來學習scripts的生命週期管理(lifecycle management)。post
{ "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得到:ui
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的事件在這個連接裏詳細定義了:3d
https://docs.npmjs.com/misc/scripts
要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼: