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.甜!