NPM rimraf – 当文件夹丢失时继续执行(停止退出代码1)
我有一个npm脚本设置为几个同步命令。 启动命令是npm run clean:install"
。
这是序列:
"install:all": "npm install && bower install", "clean": "npm run rimraf -- node_modules doc typings coverage wwwroot bower_components" "preclean:install": "npm run clean", "clean:install": "npm set progress=false && npm run install:all"
如果所有的目录都存在,就可以正常工 问题是,如果任何目录已被删除,该脚本存在代码1,并防止所有其他syncronous脚本运行。
所以这意味着它无法运行clean:install的原始命令: "clean:install": "npm set progress=false && npm run install:all
”
来自npm的错误:
npm ERR! angular2-webpack-starter@5.0.4 clean: `npm cache clean && npm run rimraf -- node_modules doc typings coverage wwwroot bower_components` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the angular2-webpack-starter@5.0.4 clean script 'npm cache clean && npm run rimraf -- node_modules doc typings coverage wwwroot bower_components'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the angular2-webpack-starter package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! npm cache clean && npm run rimraf -- node_modules doc typings coverage wwwroot bower_components npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs angular2-webpack-starter npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls angular2-webpack-starter npm ERR! There is likely additional logging output above. npm WARN Local package.json exists, but node_modules missing, did you mean to install?
最后一行将其删除。 它希望node_modules
但无法find它,所以失败。
我怎样才能让我的脚本继续执行忽略这些失败(缺less目录)?
编辑:出现错误是因为rimraf正在删除node_modules
并自行清除。 一旦文件夹被清除,rimraf消失并退出代码1.我可以排除node_modules中的rimraf文件夹,使其正确存在吗?
我(可能)正在看你正在使用的这个样板工程 。 你读过说明吗? 他们要求您运行npm install typings webpack-dev-server rimraf webpack -g
,其中包括甚至在使用该项目之前全局安装rimraf
。 如果你没有做到这一点,使用npm run clean:install
或调用此脚本的任何东西都将失败,因为在本地node_modules
找不到rimraf
模块(如果已经删除),或者它将自行删除。
解决scheme有点棘手。 问题是因为rimraf只是自己删除,因为它只是本地安装在node_modules中。 所以一旦它删除了node_modules目录,程序就会死亡。
我意识到有必要添加一个任务,让它在全球安装rimraf。 第一个执行的任务是install:all
。 然后rimraf在全局path中。 但是,rimraf是许多其他node_modules的依赖项, 因此它始终在本地安装,因此忽略了全局PATH。 它继续死亡,因为它仍然引用本地node_modules文件夹。
诀窍是在执行任何rimraf命令之前在本地卸载rimraf。 现在它被迫使用全局PATH,因为它不在本地存在。
"preinstall:all": "npm install typings webpack-dev-server rimraf webpack -g", "install:all": "npm install && bower install", "prerimraf": "npm uninstall rimraf", "rimraf": "rimraf", "clean": "npm run rimraf -- node_modules doc typings coverage wwwroot bower_components" "preclean:install": "npm run clean", "clean:install": "npm set progress=false && npm run install:all"
install:all
完成后install:all
已执行的项目加载(在Visual Studio 2015,任务运行器资源pipe理器有一个名为Project Open
的绑定),有时我想清理一切,并开始新鲜。 现在我可以简单地执行clean:install
并卸载node_modules并立即重新安装,没有任何问题! 退出代码0.甜!