# 依赖(dependencies)

📚 项目依赖可能会帮助你了解到你的项目它需要什么 🎉 2023年开年第一篇

  • package.json文件是所有依赖关系的发布地,从开发到生产到可选。您将具体说明每个依赖项指定程序包名称和最低版本信息。

下面是这个项目的对应截图,我们一起了解一下:

# 依赖的类型

{
  "devDependencies": {
    "@vue/component-compiler-utils": "^3.2.2",
    "@vuepress-reco/vuepress-plugin-bulletin-popover": "^1.6.0",
    "@vuepress-reco/vuepress-plugin-kan-ban-niang": "^1.0.5",
    "@vuepress/plugin-back-to-top": "^1.7.1", // 
    "@vuepress/shared-utils": "^1.8.2",
    "gh-pages": "^2.1.1",
    "vuepress": "^1.8.2",
    "vuepress-plugin-cursor-effects": "^1.1.2",
    "vuepress-plugin-sitemap": "^2.3.1",
    "vuepress-plugin-typescript": "^0.3.1"
  },
  "dependencies": {
    "sass-loader": "7.2.0",
    "ffmpeg": "0.0.4",
    "axios": "^0.19.2",
    "driver.js": "^0.9.8",
    "cheerio": "^1.0.0-rc.3",
    "node-fetch": "^2.6.1",
    "node-xlsx": "^0.15.0",
    "sass": "^1.45.1",
    "vuepress-theme-antdocs": "^1.3.5"
    "ts-loader": "^9.4.2",
    "typescript": "~4.2.3",
  }
}

大多数开发者都会遇到这两个模块 dependenciesdevDependencies

  • dependencies:正常的依赖关系:或者是运行代码时需要的依赖关系,代码运行必不可少的;
  • devDependencies:开发的依赖关系:在开发工作流程中的某些时候需要的依赖关系,而不是在运行代码时;
    • 像上面的gh-pages,我需要借助它同步到github-pages,而这个项目显然不需要它;
  • peerDependencies:对等的依赖:这是一种特殊类型的依赖,只有在你发布自己的包的时候才会出现。具有对等关系意味着你的包需要一个与安装包的人具有完全相同性的依赖。
  • optionalDependencies:可选的依赖
  • bundledDependencies:捆绑的依赖

大多数时候,知道前两个即可。

# 依赖的版本

Yarn中的包遵循语义版本控制,也称为 semver —— 语义化版本,semver官网 (opens new window)

这些版本被分解成主版本号.次版本号.修订号,看上去就像其中的一个:3.14.1,0.42.0,2.7.18。版本的每个部分在不同的时间递增:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

了解了三个号码的作用,上面依赖中版本号的前缀一定引起了你的注意:

{
  "dependencies": {
    "package-1": ">=2.0.0 <3.1.4",
    "package-2": "^0.4.2",
    "package-3": "~2.7.1"
  }
}

当你要安装包时,npm/yarn 会首先安装包的最新版本,然后将包名及版本号写入到 package.json 文件中。被安装的依赖的版本号前会默认加上 ^ 符号。看了下自己新配的简易环境,对上号了~

"devDependencies": {
    "css-loader": "^6.7.3",
    "html-webpack-plugin": "^5.5.0",
    "ts-loader": "^9.4.2",
    "webpack": "^5.75.0",
    "webpack-cli": "^5.0.1",
    "webpack-dev-server": "^4.11.1"
},
"dependencies": {
    "npm": "^9.2.0",
    "typescript": "^4.9.4"
}

那么他们分别是什么意思呢:

# 指定版本(锁定)

版本范围 允许扩展版本范围
2.6.11 2.6.11

# ^ 指定版本(锁定第一个非0版本级别)

大于或等于,但不修改版本中的第一个非零数字

版本范围 允许扩展版本范围
^3.1.4 =3.1.4 < 4.0.0
^0.4.2 =0.4.2 < 0.5.0

# ~ 指定版本(允许次要版本更改)

使用~指定的次要版本允许次要版本更改。仅使用~指定的主要版本将允许次要版本更改。

版本范围 允许扩展版本范围
~3.1.4 =3.1.4 < 3.2.0
~2.2.1 =2.2.1 < 2.3.0
~3.1 =3.1.x , =3.1.0 < 3.2.0
~3 =3.x , =3.0.0 < 4.0.0

# X范围

任何的X,x或者*可以用离开的部分或全部未指定的一个版本。

版本范围 允许扩展版本范围
* 任意版本
2.x =2.0.0 < 3.0.0
3.1.x =3.1.0 < 3.2.0

# 比较

每个版本范围都由比较器组成。这些比较器只是一个操作符,后跟一个版本。以下是一些基本的操作员:

版本范围 允许扩展版本范围
< 2.0.0 任意小于2.0.0
<=3.1.4 任意小于3.1.4

# 部分版本

如果部分版本被遗漏,缺少的部分用零填充。但是,他们仍然会允许改变这个价值。

版本范围 允许扩展版本范围
^0.0.x =0.0.0 <0.1.0
^0.x =0.0.0 <1.0.0
^0 =0.0.0 <1.0.0
Last Updated: 2/13/2023, 6:46:24 PM