本人用的是 Mac,因此上面幾章 npm script 都順利運行(前半生一路開掛),可是仍是有使用 Windows 系統的開發小夥伴(多句嘴,經濟容許仍是建議購置一臺 Mac,懂得投資本身)。javascript
那下面就說說在 Windows 平臺下,咱們的 npm script 還如何順利地運行。html
注:Windows 自帶的 cmd 是個不靠譜的傢伙,建議使用 git bash 來代替 cmd 運行 npm script,別說我沒告訴過你。java
前面涉及到文件操做的命令有文件和目錄建立、刪除和複製等操做,npm 社區對於這些也提供了跨平臺的兼容包,一看來看看吧git
mkdir -p
;del-cli
,同等 rm -rf
;cp -r
;%npm_package_name%
,Linux 寫法 $npm_package_name
;npm install make-dir-cli rimraf cpr cross-var -D
// 或
yarn add make-dir-cli rimraf cpr cross-var -D
複製代碼
1.文件 package.jsongithub
// 不兼容 Windows
"scripts": {
...,
"//": "# 不兼容 Windows",
"cover:cleanup": "# 清理覆蓋率報告- \n rm -rf coverage && rm -rf .nyc_output",
"cover": "# 生成覆蓋率報告 \n nyc --reporter=html npm run test",
"cover:archive": "# 歸檔覆蓋率報告 \n mkdir -p coverage_archive/$npm_package_version && cp -r coverage/* coverage_archive/$npm_package_version",
"cover:server": "http-server coverage_archive/$npm_package_version -p $npm_package_config_port",
"cover:open": "open http://localhost:$npm_package_config_port",
"postcover": "# 執行並打開覆蓋率報告 \n npm-run-all cover:archive cover:cleanup --parallel cover:server cover:open"
}
// 兼容 Windows
"scripts": {
...,
"//": "# 兼容 Windows",
"cover:cleanup": "# 清理覆蓋率報告- \n rimraf coverage && rimraf .nyc_output",
"cover": "# 生成覆蓋率報告 \n nyc --reporter=html npm run test",
"cover:archive": "# 歸檔覆蓋率報告 \n cross-var \"make-dir coverage_archive/$npm_package_version && cpr coverage coverage_archive/$npm_package_version -o\"",
"cover:server": "cross-var http-server coverage_archive/$npm_package_version -p $npm_package_config_port",
"cover:open": "cross-var open http://localhost:$npm_package_config_port",
"precover": "npm run cover:cleanup",
"postcover": "# 執行並打開覆蓋率報告 \n npm-run-all cover:archive --parallel cover:server cover:open"
}
複製代碼
2.執行npm
npm run cover
複製代碼
cp -r coverage/* coverage_archive/$npm_package_version
,Windows 寫法 cpr coverage coverage_archive/$npm_package_version -o
。細節有兩點注意:第一是參數位置,Linux 平臺 -p
緊跟在 cp
後面,Windows 平臺 -o
在 cpr
末尾;第二是複製內容路徑寫法,Linux 平臺 coverage/*
,Windows 平臺 coverage
;cover:cleanup
從 postcover
移出來放入 precover
裏執行,避免 cpr
沒歸檔完就被清空的狀況;\
轉義,而後開頭記得加上 cross-var
;開門見山,使用 cross-env 來實現。json
npm i cross-env -D
// 或
yarn add cross-env -D
複製代碼
"scripts": {
"test": "cross-env NODE_ENV=test mocha test/"
}
複製代碼