2.7 KiB
2.7 KiB
name, description
| name | description |
|---|---|
| pnpm-aliases | 以自定义名称安装包,用于版本管理、分支维护或替代方案 |
pnpm 别名
pnpm 通过 npm: 协议支持包别名。这使你可以用不同名称安装包、使用同一包的多个版本,或替换包。
基本语法
pnpm add <别名>@npm:<包名>@<版本>
在 package.json 中:
{
"dependencies": {
"<别名>": "npm:<包名>@<版本>"
}
}
使用场景
同一包的多个版本
并排安装不同版本:
{
"dependencies": {
"lodash3": "npm:lodash@3",
"lodash4": "npm:lodash@4"
}
}
使用方式:
import lodash3 from 'lodash3'
import lodash4 from 'lodash4'
用分支替换包
用分支或替代包替换原包:
{
"dependencies": {
"original-pkg": "npm:my-fork@^1.0.0"
}
}
所有 original-pkg 的 import 都会解析到 my-fork。
替换已废弃的包
{
"dependencies": {
"request": "npm:@cypress/request@^3.0.0"
}
}
作用域包与无作用域包互转
{
"dependencies": {
"vue": "npm:@anthropic/vue@^3.0.0",
"@myorg/utils": "npm:lodash@^4.17.21"
}
}
CLI 用法
添加别名
# 以别名添加 lodash
pnpm add lodash4@npm:lodash@4
# 以原包名添加分支
pnpm add request@npm:@cypress/request
添加多个版本
pnpm add react17@npm:react@17 react18@npm:react@18
搭配 TypeScript
若需为别名解析类型,你可能需要配置 TypeScript:
// tsconfig.json
{
"compilerOptions": {
"paths": {
"lodash3": ["node_modules/lodash3"],
"lodash4": ["node_modules/lodash4"]
}
}
}
或者将 @types 包与别名搭配使用:
{
"devDependencies": {
"@types/lodash3": "npm:@types/lodash@3",
"@types/lodash4": "npm:@types/lodash@4"
}
}
结合 overrides 使用
强制所有传递依赖使用某个别名:
# pnpm-workspace.yaml
overrides:
"underscore": "npm:lodash@^4.17.21"
这会将所有 underscore 的引用(包括依赖包中的)替换为 lodash。
Git 与本地别名
别名支持任何有效的 pnpm 标识符:
{
"dependencies": {
"my-fork": "npm:user/repo#commit",
"local-pkg": "file:../local-package"
}
}
最佳实践
-
命名清晰:使用描述性别名,表明用途
"lodash-legacy": "npm:lodash@3" "lodash-modern": "npm:lodash@4" -
记录别名:添加注释或文档说明别名存在的原因
-
全局替换优先使用 overrides:如果想在所有地方替换某个包,应使用 overrides 而非别名
-
全面测试:别名化包可能存在细微的行为差异