在 package.json 中使用“*”而不是某个版本的“~”、“^”库是一个好习惯吗?

Posted

技术标签:

【中文标题】在 package.json 中使用“*”而不是某个版本的“~”、“^”库是一个好习惯吗?【英文标题】:Is it a good practice to use in package.json '*' instead of a certain version of library of '~', '^'? 【发布时间】:2021-12-27 05:30:07 【问题描述】:

我通过了一门关于 Node.js 和 Angular 的学习课程。那里的老师在 包.json

很多星号而不是特定版本的库。

"dependencies": 
    "bcrypt": "*",
    "bcryptjs": "^2.4.3",
    "body-parser": "*",
    "cors": "*",
    "express": "*",
    "jsonwebtoken": "*",
    "mongoose": "*",
    "morgan": "^1.10.0",
    "passport": "*",
    "passport-jwt": "*"
  ,
  "devDependencies": 
    "nodemon": "^2.0.7"
  

使用它们是好还是坏?

【问题讨论】:

不,这不是一个好习惯。为什么?新升级,您的代码依赖于以前的版本。他们改变语法和繁荣......你的代码没有运行。 一个或多个发生重大变化及其混乱 【参考方案1】:

通配符是个坏主意。它说无论如何都要加载最新版本。听起来是个好主意,因此您不必不断更新。在他们将重大更改引入 api 之前,这很好。

如果他们从 v1.5 更新到 v2.0 并更改了他们的 api,如果不向后兼容,您依赖 1.5 语法的代码将不再在 v2.0 中工作。对多个包执行此操作,您的手上会弄得一团糟。

有些人会允许次要版本为通配符,但大多数人将其锁定并手动升级,以便对其进行全面测试。

https://docs.npmjs.com/about-semantic-versioning

【讨论】:

以上是关于在 package.json 中使用“*”而不是某个版本的“~”、“^”库是一个好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 package.json 中使用“*”而不是某个版本的“~”、“^”库是一个好习惯吗?

为啥人们将 typescript 的类型作为依赖项存储在 package.json(而不是 devDep)中? [复制]

如何将 package.json 导入 Typescript 文件而不将其包含在编译输出中?

在 node package.json 中,使用额外参数从另一个脚本调用脚本,在这种情况下添加 mocha watcher

package.json 中的版本是不是应该始终遵循 semver?

通过终端检查 npm 包是不是安装在 package.json 中