我有一个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文件夹,使其正确存在吗?
答案 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.甜蜜!