一、什么是 npm 腳本?
npm 允許在package.json
文件里面,使用scripts
字段定義腳本命令。
{ // ... "scripts": { "build": "node build.js" } }
上面代碼是package.json
文件的一個片段,里面的scripts
字段是一個對象。它的每一個屬性,對應一段腳本。比如,build
命令對應的腳本是node build.js
。
命令行下使用npm run
命令,就可以執行這段腳本。
$ npm run build # 等同於執行 $ node build.js
這些定義在package.json
里面的腳本,就稱為 npm 腳本。它的優點很多。
- 項目的相關腳本,可以集中在一個地方。
- 不同項目的腳本命令,只要功能相同,就可以有同樣的對外接口。用戶不需要知道怎么測試你的項目,只要運行
npm run test
即可。- 可以利用 npm 提供的很多輔助功能。
查看當前項目的所有 npm 腳本命令,可以使用不帶任何參數的npm run
命令。
$ npm run
二、原理
npm 腳本的原理非常簡單。每當執行npm run
,就會自動新建一個 Shell,在這個 Shell 里面執行指定的腳本命令。因此,只要是 Shell(一般是 Bash)可以運行的命令,就可以寫在 npm 腳本里面。
比較特別的是,npm run
新建的這個 Shell,會將當前目錄的node_modules/.bin
子目錄加入PATH
變量,執行結束后,再將PATH
變量恢復原樣。
這意味着,當前目錄的node_modules/.bin
子目錄里面的所有腳本,都可以直接用腳本名調用,而不必加上路徑。比如,當前項目的依賴里面有 Mocha,只要直接寫mocha test
就可以了。
"test": "mocha test"
而不用寫成下面這樣。
"test": "./node_modules/.bin/mocha test"
由於 npm 腳本的唯一要求就是可以在 Shell 執行,因此它不一定是 Node 腳本,任何可執行文件都可以寫在里面。
npm 腳本的退出碼,也遵守 Shell 腳本規則。如果退出碼不是0
,npm 就認為這個腳本執行失敗。
原文:www.ruanyifeng.com/blog/2016/10/npm_scripts.html