npm原理
npm 腳本的原理非常簡單。每當執行npm run,就會自動新建一個 Shell,在這個 Shell 里面執行指定的腳本命令。因此,只要是 Shell(一般是 Bash)可以運行的命令,就可以寫在 npm 腳本里面。
特別的是,npm run新建的這個 Shell,會將當前目錄的node_modules/.bin子目錄加入PATH變量,執行結束后,再將PATH變量恢復原樣。
這就意味著,當前目錄下的node_modules/.bin子目錄里面的所有腳本,都可以直接用腳本名調用,而不必加上路徑。
scripts 配置
其實,scripts的配置就是把bash里面執行的命令,寫到scripts對象里,具體怎么寫要看每個腳本的配置方法!!!!!
首先,我們需要搞清楚如何使用 npm 來管理構建腳本。作為核心命令之一的 npm run-script 命令(簡稱 npm run )可以從 package.json 中解析出 scripts 對象,然后將該對象的key作為 npm run 的第一個參數,它會在操作系統的默認終端中執行該key對應的命令,請看下面的 package.json 文件:
{
"name": "express-sticky-note",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"webpack": "webpack --config ./src/webpack.config.js",
"watch": "onchange 'src/**/*.js' 'src/**/*.less' -- npm run webpack"
},
"devDependencies": {
"onchange": "^3.2.1",
"webpack": "^2.2.1",
"webpack-dev-server": "^2.4.2"
}
}
如果運行npm run webpack
,那么 npm 將在bash中執行webpack --config ./src/webpack.config.js
,如果運行npm run watch
,那么將在bash中執行onchange 'src/**/*.js' 'src/**/*.less' -- npm run webpack
另外,我們還可以合并scripts命令,比如在上面的代碼中加入all命令,那么當我們運行npm run all命令的時候,npm run webpack 和 npm run watch兩個命令都會執行了
{
"name": "express-sticky-note",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"webpack": "webpack --config ./src/webpack.config.js",
"watch": "onchange 'src/**/*.js' 'src/**/*.less' -- npm run webpack",
"all":"npm run webpack && npm run watch" //&&表示順序執行,&表示同時執行
},
"devDependencies": {
"onchange": "^3.2.1",
"webpack": "^2.2.1",
"webpack-dev-server": "^2.4.2"
}
}