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。
在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。