NPM rimraf - 在文件夹丢失时继续执行(停止退出代码1)

时间:2016-05-08 00:01:27

标签: javascript node.js shell command-line npm

我有一个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并阻止所有其他同步脚本运行。

这意味着它运行原始的clean命令是错误的:安装是" "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,但无法找到它,所以它失败了。

如何让我的脚本继续执行以忽略这些失败(缺少目录)?

编辑:发生错误是因为rimraf正在删除node_modules并自行清除。一旦它清除了文件夹,rimraf就会消失并退出代码1.我可以在node_modules中排除rimraf文件夹,使其正确存在吗?

2 个答案:

答案 0 :(得分:3)

我(可能)正在查看您正在使用的boilerplate project。你看过说明了吗?他们要求您在使用该项目之前运行npm install typings webpack-dev-server rimraf webpack -g,其中包括全球安装rimraf 。如果您未能执行此操作,则使用npm run clean:install或调用此脚本的任何内容都将失败,因为在您的本地rimraf中找不到node_modules模块(如果已经删除)或它将自行删除。

答案 1 :(得分:0)

解决方案有点棘手。问题是因为rimraf正在删除自己,因为它只在本地安装在node_modules中。因此,一旦删除了node_modules目录,该程序就会死亡。

我意识到有必要添加一个任务来让它全局安装rimraf。执行的第一个任务是install:all。然后rimraf处于全球路径中。但是,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之后(在Visual Studio 2015中,Task Runner Explorer有一个名为Project Open的绑定),有时我想要清理所有内容并重新开始。现在我可以简单地执行clean:install并卸载node_modules并立即重新安装,没有问题!退出代码0.甜蜜!