我正在使用gulp任务来构建和部署多个项目/应用程序。此任务的其中一个步骤是为每个应用程序运行npm update
,因此我使用节点child_process exec
语句在相关的应用程序工作目录中运行此命令:
exec('npm update', {cwd:'./appfolder}, function (err) {...});
我没有遇到任何问题,并且它正常工作,直到一个特定的npm更新发出以下错误(为了清楚起见缩写为......)
npm ERR! argv "C:\\Program Files (x86)\\nodejs\\node.exe" "...\\npm\\node_modules\\npm\\bin\\npm-cli.js" "update"
npm ERR! node v5.6.0
npm ERR! npm v3.3.4
npm ERR! path ...\node_modules\uglify-js\node_modules\async
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename '...\appfolder\node_modules\uglify-js\node_modules\async' -> '....\appfolder\node_modules\gulp-uglify\node_modules\async'
确实,'...\appfolder\node_modules\uglify-js\node_modules\async'
目录不存在,所以在绝望中我试图在命令行中手动运行npm update
,奇怪的是这有效!
那么为什么从gulp任务中的child_process exec
语句运行npm更新不起作用?仅供参考,我正在以管理员身份运行的命令行运行gulp任务。因此,我认为必要的权利正在从命令行转移到gulp到child process exec
到npm update
。或者可能不是!!哦,这是在Windows上运行。