快试试 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 范围运算符。在开发过程中以及使用应用程序时,可以安全地允许补丁或次要更新。

参考

相关推荐
zzzzzz3105 分钟前
36K stars 的“酷炫组件”,到底该怎么用才不显得用力过猛?
前端·react.js·动效
2401_894915533 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
吴声子夜歌7 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
rockey6277 小时前
C#脚本引擎之AScript与Jurassic、Jint对比
javascript·c#·.net·js·script·动态脚本
黄敬峰8 小时前
一文搞懂 Docker + Dockerfile:从镜像构建到全栈部署
面试
Profile排查笔记8 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
lzhdim9 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
denggun123459 小时前
yield
前端·数据库·python
前端snow9 小时前
ai agent -- prompt汇总
前端
muddjsv11 小时前
前端性能优化实战:从加载到渲染的全面提速指南
前端·性能优化