如何使用 npm 重新安装应用程序的依赖项?

Posted

技术标签:

【中文标题】如何使用 npm 重新安装应用程序的依赖项?【英文标题】:How do you reinstall an app's dependencies using npm? 【发布时间】:2012-10-03 16:58:47 【问题描述】:

有没有一种简单的方法来重新安装我的应用所依赖的所有包(即它们在我的应用节点模块文件夹中)?

【问题讨论】:

npm rebuild 也可能有助于解决本机依赖项的一些问题 如果它对其他人有帮助:如果您只是想重新安装一个软件包,npm update <packageName> 效果很好 【参考方案1】:

我能看到的最简单的方法是删除node_modules 文件夹并执行npm install

【讨论】:

同意;假设你已经为你的应用创建了一个package.json 文件。 请注意,在删除node_modules 目录后运行npm install 可能会导致package.json 中定义的不同版本的依赖关系被拉下。如果您的应用需要非常特定版本的依赖项,请小心并查看 npm shrinkwrap 或检查您的 node_modules 目录以进行源代码控制。 @smithclay 我已经在我的应用程序的 package.json 中定义了包的显式版本,所以应该没问题吧? @vadim 我正在对npm install 的行为进行一些测试,它总是重新安装依赖项并将软件包升级到 package.json 允许的最新版本。因此,除非您认为它已损坏,否则不需要删除 node_modules 文件夹。你认为它应该被删除有什么理由吗?但是,如果目的是删除任何无关的包,那么您可以执行 npm prune 代替 @himanshu 你是对的npm install 将所有模块升级到 package.json 状态。但问题是如何重新安装所有软件包。因此它们可能已损坏或在升级 node.js 版本后可能需要重建二进制部分。【参考方案2】:

正确的方法是执行npm update。这是一个非常强大的命令,它会更新丢失的软件包并检查是否可以使用已安装的较新版本的软件包。

阅读 Intro to NPM 以了解您可以使用 npm 做什么。

【讨论】:

但是如果没有更新的包那么这不会做任何事情,对吧?即使软件包已经是最新版本,我也在尝试强制重新安装。 如果没有丢失的包,那么它将检查是否可以使用 package.json 中列出的最新版本的包(包括包的依赖项)。因此,本质上它会尽可能升级软件包。但它不会重新安装。如果您想使用命令执行此操作,您可以执行npm uninstall <package_name> 卸载特定包或执行npm uninstall 卸载所有包。 我尝试只做npm uninstall 而不指定包,但会引发错误。 您提供的链接已失效,能否提供一个新链接? (我找到了this,但我不确定改成它是否可以接受) 不,这不是正确的方法,也不是问题的答案。问题是如何重新安装而不是如何更新到最新版本。我需要降级。【参考方案3】:

大多数时候我使用以下命令来实现所有节点模块的完全重新安装(确保您在项目文件夹中)。

rm -rf node_modules && npm install

您也可以在删除 node_modules 文件夹后运行 npm cache clean 以确保没有任何缓存的依赖项。

【讨论】:

【参考方案4】:

npm 更新了 install 的 CLI 命令并添加了 --force 标志。

npm install --force

--force(或-f)参数将强制npm 获取远程资源,即使磁盘上存在本地副本。

npm install

【讨论】:

我的经验是这行不通。文档说可以,但实际上没有。【参考方案5】:

您可以使用 npm 中的 reinstall module。

安装后,可以使用如下命令:

reinstall

手动删除node_modules文件夹和创建npm install的唯一区别是这个命令会自动清除npm的缓存。因此,您可以在一个命令中完成三个步骤。

upd: npx reinstall 是一种无需全局安装包即可运行此命令的方法(仅适用于 npm5+)

【讨论】:

@g00glen00b 我已经编辑,现在它确实包含有用的信息,没有超链接【参考方案6】:

对于 Windows,您可以使用

(if exist node_modules rmdir node_modules /q /s) && npm install

删除node_modules 目录并执行npm install 然后。安装前删除可确保重新安装所有软件包。

【讨论】:

【参考方案7】:

按照此步骤重新安装节点模块并更新它们

即使 node_modules 文件夹不存在也可以工作。现在同步执行以下命令。您也可以使用“npm update”,但我认为这是首选方式

npm outdated // not necessary to run this command, but this will show outdated dependencies

npm install -g npm-check-updates // to install the "ncu" package

ncu -u --packageFile=package.json // to update dependencies version in package.json...don't run this command if you don't need to update the version

npm install: will install dependencies in your package.json file.

如果您对 package.json 文件中依赖项的版本没有问题,则无需执行这些步骤,只需运行即可

 npm install

【讨论】:

【参考方案8】:

你可以用一个简单的命令来做到这一点:

npm ci

这是npm ci documentation:的摘录

简而言之,使用npm installnpm ci的主要区别是:

项目必须有一个现有的package-lock.jsonnpm-shrinkwrap.json。 如果包锁中的依赖项与package.json 中的依赖项不匹配,npm ci 将退出并报错,而不是更新包锁。 npm ci 一次只能安装整个项目:无法使用此命令添加单个依赖项。 如果node_modules 已经存在,它将在npm ci 开始安装之前自动删除。 它永远不会写信给package.json 或任何包锁:安装基本上是冻结的。

【讨论】:

@iamkeir 因为它是在问题发布 8 年后发布的【参考方案9】:

删除node_module并通过命令重新安装

rm -rf node_modules && npm i

【讨论】:

【参考方案10】:

从 npm cli v6.5.0 开始,您可以使用 backronym:

npm clean-install

来源:

https://github.com/npm/cli/releases/tag/v6.5.0 https://github.com/npm/cli/commit/fc1a8d185fc678cdf3784d9df9eef9094e0b2dec

【讨论】:

值得注意的是,如果 package-lock.json 缺失,此命令将不起作用。如果在运行这些命令中的任何一个时遇到错误,很可能就是这种情况。为了解决这个问题,我运行npm i && npm cache verify

以上是关于如何使用 npm 重新安装应用程序的依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在安装项目中排除依赖项?

如何安装 NPM 拒绝安装的依赖项?

如何强制 npm 3 安装嵌套依赖项?

如何使用 npm install 或 yarn 仅安装具有自己版本的 package.json 依赖项

如何卸载 package.json (NPM) 中列出的所有依赖项?

如何强制排除 NPM 的嵌套依赖项?