Files
2026-07-13 21:35:53 +08:00

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"
  }
}

最佳实践

  1. 命名清晰:使用描述性别名,表明用途

    "lodash-legacy": "npm:lodash@3"
    "lodash-modern": "npm:lodash@4"
    
  2. 记录别名:添加注释或文档说明别名存在的原因

  3. 全局替换优先使用 overrides:如果想在所有地方替换某个包,应使用 overrides 而非别名

  4. 全面测试:别名化包可能存在细微的行为差异