如何使用npm进行干净的安装(删除node_modules并重新安装)?

260
有没有办法让npm取消构建node_modules下的所有模块?类似于npm rebuild,它可以删除所有构建产物但不重新构建它们吗?

4
想不到你会问这个问题。我一直按照http://www.mikealrogers.com/posts/nodemodules-in-git.html中的建议将我的node_modules目录提交到git中。当我添加新模块或更新当前模块时,会在git中产生不应出现的构建工件,因此需要清除它们。我在想如果我能先清理它们,整个过程可能会更顺利一些。 - Dave Causey
1
一个快速的提示:现在NPM支持shrinkwrap(参见http://npmjs.org/doc/shrinkwrap.html),你可以锁定所有依赖项的版本(而不仅仅是顶级依赖项)。 - Michelle Tilley
2
没有这个功能对跨平台开发来说很糟糕。我们在 Mac 上进行开发,而在 Linux 上运行 CI,并且每次在 Linux 上构建时都需要删除 node_modules 目录并完全重新安装,这浪费了大量时间。 - JBCP
7
@JBCP,你做错了。你应该在packages.json中安装模块(使用npm --save),并将node_modules目录放在.gitignore中(如果使用了Git)。CI不应该拉取你的node_modules,但应该执行npm install。最后,如果从npm注册表下载太慢,请使用类似sinopia的东西来缓存它。 - Bojan Markovic
1
@BojanMarkovic - 你说得对,这就是我们现在设置项目的方式。我上面的评论是大约一年前的了。有一些项目建议将node_modules提交到Git中,但那绝对是不正确的。 - JBCP
显示剩余3条评论
11个回答

1

我已经在我的 package.json 文件中完成了这个操作。

"scripts": {
"clean": "rm -rf ./node_modules package-lock.json .cache dist && npm i",
}

最好使用 rm -r 命令,不建议使用 f 参数。 - Lars Vonk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接