version
version
字段表示包的版本号,大致符合 x.x.x
的格式,严格来说应该叫 major.minor.patch
(主版本号.次版本号.修订号
),如果要进一步了解版本号相关的知识,我们可以阅读以下文章来详细了解什么是语义化版本。
版本约束
依赖信息的结构是一个对象,其中依赖包的名称作为键(key),依赖的版本约束作为值(value)。
{
"dependencies": {
"lodash": "^4.17.21",
},
"devDependencies": {
"vite": "~4.2.0"
}
}
版本约束限制了包管理器为项目安装依赖时可选的版本范围:
^
的含义是安装最新的minor
版本。例如^1.2.0
的约束下,会为项目安装最新的minor
版本1.X.Y
,但不会安装下一个major
版本2.0.0
。~
的含义是安装最新的patch
版本。例如~1.2.0
的约束下,会为项目安装最新的patch
版本1.2.X
,但不会安装下一个minor
版本1.3.0
。- 如果版本号前面没有任何标识符,表示固定版本号,无论如何都只安装这个固定版本。
依赖分类
很多情况下,我们其实并没有真正搞懂常见的三种依赖类型—— dependencies
、devDependencies
、peerDependencies
的真正含义与表现。这里简单给出一个表格说明帮助大家正确理解。
依赖类型 | 项目中 | 依赖中 | 用途 |
---|---|---|---|
dependencies | 会被安装 | 会被安装 | 项目运行时依赖 |
devDependencies | 会被安装 | 不会被安装 | 项目在开发过程需要的依赖。一般构建工具、测试框架、代码规范工具都会被作为开发依赖 |
peerDependencies | 不会被安装 | 不会被安装。但是若其中声明的依赖没有被项目安装,或者版本不匹配时,会生成警告信息提示用户 | 定义项目需要的依赖环境。常用于表示插件和主框架的关系,如 @vitejs/plugin-vue 的 peerDependencies 中就声明了主框架 vite 和 vue |
中枢管理操作
在 workspace
模式下,代码仓根目录通常不会作为一个子模块或者 npm
包,而是**主要作为一个管理中枢,执行一些全局操作,安装一些共有的依赖。**下面介绍一些常用的中枢管理操作。
- 创建一个
package.json
文件。
pnpm init
- 设置用户的全局
.npmrc
配置
pnpm config set <key> <value>
- 根据当前目录
package.json
中的依赖声明安装全部依赖,在 workspace 模式下会一并处理所有子模块的依赖安装。
pnpm install
- 安装项目公共开发依赖,声明在根目录的 package.json - devDependencies 中。
-w
选项代表在monorepo
模式下的根目录进行操作。 - 每个子包都能访问根目录的依赖,适合把
TypeScript
、Vite
、eslint
等公共开发依赖装在这里。
pnpm install -wD xxx
- 卸载公共依赖,在根目录的 package.json - devDependencies 中删去对应声明
pnpm uninstall -w xxx
- 执行根目录的 package.json 中的脚本
pnpm run xxx