今天在新clone的一個項目里,打包報如下錯:
反復重新安裝依賴,發現無濟於事,可同事的機器運行不報錯
檢查代碼發現:
const {spawn} = require('promisify-child-process');
Node.sj spawn函數可以用於調用系統上的命令,如在 Linux, macOS 等系統上
例如:
spawn('rm', ['-rf', deployDir])
spawn('mkdir', ['dist'])
...
同樣的語句在 Windows 上執行則會報錯
因為在 Windows 上,當我們執行 npm
時,我們實際執行的是 npm.cmd
批處理
解決方案:顯式調用
spawn('cmd',['/c', 'npm'],['run', `build:${env}`]);
或者 shell: process.platform === 'win32'
spawn('git', args, {
cwd: deployDir,
shell: process.platform === 'win32'
});
第三方庫:cross-spawn
或者
const spawn = require('hexo-util').spawn
版本:(package.json)
"hexo-util": "^0.6.3"