今天在新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"