快试试 save exact,防止你的项目依赖版本滑动

如果你正在构建一个生产应用程序,你并不总是希望让你项目的依赖项自动更新,即使您只指定了一个 PATCH 更新,由于有数百个互操作包,因此有可能出现未经测试的更新会毁掉你的项目,那么你一样要试试 save-exact。在开发过程中以及使用应用程序时,可以安全地允许补丁或次要更新。

我们先来看一个最简单的测试,例如我在项目依赖了两个包:

json 复制代码
"devDependencies": {
  "@babel/cli": "^7.10.5",
  "@babel/plugin-transform-runtime": "^7.11.0"
}

当删除 node_modules 文件夹并运行时 npm install,已安装软件包的版本可能会在更高版本可用时更新,原因是安装的依赖产生了滑动,这可能会破坏应用程序,不同版本的的特效可能存在不一致的场景,这其实是非常危险的。 ^ 会匹配最新的大版本依赖包,比如 ^1.2.3 会匹配所有 1.x.x 的包,包括 1.3.0,但是不包括 2.0.0。

save-exact

使用 save-exact 后,保存到 package.json 的依赖项将使用精确的版本进行配置,而不是使用 npm 的默认 semver 范围运算符。

使用

在项目中可以通过 .npmrc / .yarnrc 来对 save-exact 进行配置。

js 复制代码
#.npmrc
save-exact=true
js 复制代码
#.yarnrc
save-prefix ~

当我们再次安装使用 yarn add react 时,你会发现不会有滑动版本。 .npmrc / .yarnrc 的配置是项目级别的。你也可以针对某一个依赖使用 save-exact。例如:

js 复制代码
yarn add react --save-exact

这样也能达到同样的效果。并且你还可以通过设置用户级别的 npm config 来达到效果。

js 复制代码
npm config set save-exact true

不过这里需要注意的是,它们是有优先级的。

配置优先级

除了命令行 save-exact,当我们在使用 npmrc 配置时,按照依赖会检查配置,其实就是检查 .npmrc 的配置,在我们的电脑中存在多个 .npmrc 的配置。

1.项目中的 .npmrc

项目下 .npmrc 文件的优先级最高,可以给每个项目配置不同的镜像,项目之间的配置互不影响。 在项目的根目录下新建 .npmrc 文件,在里面以 key=value 的格式进行配置。

js 复制代码
save-exact=true

2.用户配置的 .npmrc(~/.npmrc)

可以通过 npm config get userconfig 命令获取用户配置的 .npmrc 文件在哪里。 可以通过 npm config set 命令设置用户级别的 .npmrc 配置。

js 复制代码
npm config set registry https://registry.npm.taobao.org

如果想删除可以直接编辑文件,或者使用 npm config delete registry 命令来进行删除。

3.全局配置的 .npmrc

可以通过 npm config get prefix 命令获取全局配置的 .npmrc 文件的前缀地址, 记住是前缀地址,不是完整地址。完整地址是{$prefix}/etc/npmrc。 但是如果你从来没有全局配置过,就不会存在这个文件。 也可以通过命令行来进行全局 .npmrc 文件的配置。

js 复制代码
npm config set registry https://registry.npm.taobao.org -g

4.npm 内置的 .npmrc

npm 内置 .npmrc 配置文件和 npm 同级,所以可以通过获取 npm 的路径,来找到 npm 内置的 .npmrc 文件。 可以通过 which npm 来获取 npm 的路径,也就找到了 npm 内置的 .npmrc 文件。 npm install 执行之后,首先,检查并获取 npm 配置,这里的优先级为:项目级的 .npmrc 文件 > 用户级的 .npmrc 文件> 全局级的 .npmrc 文件 > npm 内置的 .npmrc 文件。

当我们在执行安装命令之后,如果命令行中不包含 save-exact,然后检查并获取 npm 配置中的 save-exact,这里的优先级为:项目级的 .npmrc 文件 > 用户级的 .npmrc 文件> 全局级的 .npmrc 文件 > npm 内置的 .npmrc 文件。

总结

使用 save-exact 可以在项目安装依赖时,保存到 package.json 的依赖项将使用精确的版本进行配置,而不是使用 npm 的默认 semver 范围运算符。在开发过程中以及使用应用程序时,可以安全地允许补丁或次要更新。

参考

相关推荐
tedcloud1234 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
Mahir087 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
UXbot7 小时前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
ZC跨境爬虫8 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
刀法如飞9 小时前
Go 字符串查找的 20 种实现方式,用不同思路解决问题
算法·面试·程序员
PieroPc10 小时前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
巴巴博一11 小时前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
kyriewen11 小时前
半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug
前端·javascript·ai编程
kyriewen11 小时前
我让 AI 当了 24 小时全年无休的“毒舌考官”
前端·ci/cd·ai编程
hexu_blog11 小时前
vue+java实现图片批量压缩
java·前端·vue.js