如果你正在构建一个生产应用程序,你并不总是希望让你项目的依赖项自动更新,即使您只指定了一个 PATCH 更新,由于有数百个互操作包,因此有可能出现未经测试的更新会毁掉你的项目,那么你一样要试试 save-exact。在开发过程中以及使用应用程序时,可以安全地允许补丁或次要更新。
我们先来看一个最简单的测试,例如我在项目依赖了两个包:
"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 后,保存到 package.json 的依赖项将使用精确的版本进行配置,而不是使用 npm 的默认 semver 范围运算符。
在项目中可以通过 .npmrc / .yarnrc 来对 save-exact 进行配置。
#.npmrcsave-exact=true
#.yarnrcsave-prefix ~
当我们再次安装使用 yarn add react 时,你会发现不会有滑动版本。
图片
.npmrc / .yarnrc 的配置是项目级别的。你也可以针对某一个依赖使用 save-exact。例如:
yarn add react --save-exact
图片
这样也能达到同样的效果。并且你还可以通过设置用户级别的 npm config 来达到效果。
npm config set save-exact true
不过这里需要注意的是,它们是有优先级的。
除了命令行 save-exact,当我们在使用 npmrc 配置时,按照依赖会检查配置,其实就是检查 .npmrc 的配置,在我们的电脑中存在多个 .npmrc 的配置。
图片
项目下 .npmrc 文件的优先级最高,可以给每个项目配置不同的镜像,项目之间的配置互不影响。 在项目的根目录下新建 .npmrc 文件,在里面以 key=value 的格式进行配置。
save-exact=true
图片
可以通过 npm config get userconfig 命令获取用户配置的 .npmrc 文件在哪里。
图片
可以通过 npm config set 命令设置用户级别的 .npmrc 配置。
npm config set registry https://registry.npm.taobao.org
如果想删除可以直接编辑文件,或者使用 npm config delete registry 命令来进行删除。
图片
可以通过 npm config get prefix 命令获取全局配置的 .npmrc 文件的前缀地址,
图片
记住是前缀地址,不是完整地址。完整地址是{$prefix}/etc/npmrc。 但是如果你从来没有全局配置过,就不会存在这个文件。 也可以通过命令行来进行全局 .npmrc 文件的配置。
npm config set registry https://registry.npm.taobao.org -g
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 范围运算符。在开发过程中以及使用应用程序时,可以安全地允许补丁或次要更新。
https://docs.npmjs.com/cli/v10/commands/npm-install#save-exact
https://teamtreehouse.com/community/why-install-npm-packages-as-saveexact
https://stackoverflow.com/questions/58638817/what-is-the-purpose-of-using-save-exact
本文链接:http://www.28at.com/showinfo-26-16518-0.html快试试 save exact,防止你的项目依赖版本滑动
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: Next.js的崛起:为什么它是现代网站的首选全栈框架
下一篇: 深入了解Python类与面向对象编程