npm 默认依赖特异性

npm default dependency specificity

package.json中,如果我指定一个依赖关系,例如

"react": "~16.1.1"

这允许 NPM 仅更改补丁版本,即它可以使用版本 16.1.2,但不会使用版本 16。2.X

同样,如果我指定一个依赖项,例如

"react": "^16.1.1"

这允许 NPM 仅更改次要版本(中间数字)。

但是如果我在依赖版本前面没有任何字符怎么办,例如

"react": "16.1.1"

这是否意味着只能使用16.1.1版本?

通过 "Pinning" 您的项目在 package.json 中的依赖性(即指定 semver without a caret or tilde 范围说明符)将导致 "similar" 每次安装的版本。

举个例子; "react": "16.1.1" 在您的 package.json 中指定,这将导致每次 npm install 为 运行 时安装 react 的版本 16.1.1

但是,(注意我强调了 "similar" 这个词),这并不意味着 "pinning" 您将获得上次安装软件包时构成 react 软件包版本 16.1.1 的所有 "exact same" 文件。这样做的原因是 react 在其 package.json 中指定的依赖项使用插入符和波浪号范围说明符的组合。因此,这些依赖项的版本可能会发生变化。同样,这些依赖项的依赖项等(又名:依赖树)也可能发生变化。

如果您想真正锁定依赖版本树以用于发布目的,请查看 npm-shrinkwrap and/or npm-package-locks