如何将 node_modules 与实际的 package.json 同步?

Posted

技术标签:

【中文标题】如何将 node_modules 与实际的 package.json 同步?【英文标题】:How to sync node_modules with actual package.json? 【发布时间】:2015-11-26 23:10:56 【问题描述】:

例如,如果我用 git 切换了分支,并希望将 node_modules 与当前的 package.json 同步。我该怎么做?

【问题讨论】:

【参考方案1】:

如果你的新分支有新的 npm 包或更新的版本依赖,只需在切换分支后再次运行 $ npm install 即可。

如果您的新分支从 package.json 中删除 npm 包,请运行 $ npm prune

【讨论】:

在这种情况下运行 npm install 后,我一直坚持“shasum check failed”。可以和这个联系吗?你确定 npm install 在这种情况下有效吗? 我很肯定npm install 在这些情况下有效。您可以随时尝试删除您的node_modules 文件夹并重新运行npm install。此线程也可能与您的问题有关。【参考方案2】:

我们可以利用git hooks 自动运行npm install 当我们拉取或结帐到不同的分支时package.json 发生变化。

这是需要执行的脚本。我们基本上检查 package.json 文件是否存在于 diff 中。

#/usr/bin/env bash

changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"

check_run() 
    echo "$changed_files" | grep --quiet "$1" && eval "$2"


check_run package.json "npm install"

运行上面的脚本

git pull - 运行chmod +x post-merge 使其可执行然后mv post-merge .git/hooks/ 将其放入git 挂钩中。 git checkout - 运行chmod +x post-checkout 然后mv post-checkout .git/hooks/

【讨论】:

【参考方案3】:

npm install 将从packages.json 安装最新版本的软件包,这通常不是我们想要的行为。

当您在分支之间切换时,您很可能希望在package-lock.json 中修复版本。从 npm 5.7.0 开始,有一个特殊的命令 npm ci 可以做到这一点。

更多详情Why does "npm install" rewrite package-lock.json?

【讨论】:

以上是关于如何将 node_modules 与实际的 package.json 同步?的主要内容,如果未能解决你的问题,请参考以下文章

我如何直接将“node_modules”与“yarn berry”一起使用

你的硬盘已满,清理 node_modules 来腾出空间

pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)

如何使用 postinstall 编辑 package.json

如何安装 npm peerDependencies 以删除警告

如何切换到已保存到桌面的 node_modules 文件的本地版本?