跳至主要内容

本地链接

有时,您可能需要在另一个本地(“下游”)仓库中尝试您本地 typescript-eslint 仓库的更改。执行此操作的一般策略是

  1. 全局链接: 使用您的包管理器的全局链接命令,使 @typescript-eslint/* 包作为全局符号链接可用。
  2. 仓库链接: 使用你的包管理器链接命令在本地下游仓库中引用这些全局符号链接。
  3. 尝试规则: 通过在本地下游仓库中启用你的本地规则和插件来测试它们。

全局链接

要使所有 @typescript-eslint/* 包在全局范围内可用,请从你的 typescript-eslint 仓库根目录运行此命令

for package in ./packages/*; do
cd $package
# Insert your package manager's global link command here
cd ../..
done

要替换 # 注释的命令取决于本地下游仓库的包管理器

仓库链接

现在 @typescript-eslint/* 包在本地可用,你可以在本地下游仓库中链接到它们。对本地下游仓库依赖的任何 @typescript-eslint/* 包运行该仓库的包管理器的链接命令

  • npm: npm link @typescript-eslint/eslint-plugin @typescript-eslint/parser
  • pnpm: pnpm link @typescript-eslint/eslint-plugin @typescript-eslint/parser --global
  • Yarn v1 / classic: yarn link @typescript-eslint/eslint-plugin @typescript-eslint/parser
  • Yarn v2 / v3 / berry: yarn link /path/to/your/typescript-eslint/packages/eslint-plugin /path/to/your/typescript-eslint/packages/parser
    • 这将在本地下游仓库的 package.json 中为每个包添加一个 resolutions 条目。

现在,你应该能够像往常一样在本地下游仓库中运行 ESLint,并让它引用本地 typescript-eslint 包。

提示

要检查是否正在使用本地包,请考虑在 ./packages/eslint-plugin/dist/index.js 等文件中添加 console.log("Hello, world!");,并确保在对本地下游存储库进行 lint 时该日志出现。

尝试规则

现在您已将 @typescript-eslint/* 包与本地下游存储库链接,下一步将是在本地存储库 ESLint 配置文件中包含该规则,例如

.eslintrc.json
{
"rules": {
"@typescript-eslint/your-awesome-rule": "error"
}
// ...
}

之后,您需要运行存储库的 lint 脚本,您的更改应该会反映在项目中。

注意

@typescript-eslint/ 包的更改不会反映在链接的存储库中,直到它们在本地构建。要重新构建所有包,请从根目录运行 yarn build。要仅在 ESLint 插件上启动监视模式构建器,请从 ./packages/eslint-plugin 运行 yarn build --watch

故障排除

找不到包 (无法找到模块)

如果本地 @typescript-eslint/* 包具有发布的 npm 版本中不存在的依赖项,则本地下游存储库中的 lint 可能看到不同的错误

Error: Failed to load parser '@typescript-eslint/parser' declared in '.eslintrc.js': Cannot find module 'ts-api-utils'
Require stack:
- /repos/typescript-eslint/packages/typescript-estree/dist/convert-comments.js

在这种情况下,您可以手动在本地下游存储库中安装任何缺少的包作为开发依赖项 (--save-dev)。

yarn add ts-api-utils -D

Yarn v2 / v3 / berry 对冲突的依赖项可能很严格。在本地下游存储库中运行 yarn 进行安装时,您可能会看到有关冲突版本的错误

$ yarn
➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed
➤ YN0000: ┌ Fetch step
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0071: │ Cannot link @typescript-eslint/parser into eslint-plugin-import@npm:2.27.5 [6d590] dependency debug@npm:4.3.4 [531b6] conflicts with parent dependency debug@npm:3.2.7 [65bed]
➤ YN0071: │ Cannot link @typescript-eslint/parser into eslint-module-utils@npm:2.8.0 [0b7fa] dependency debug@npm:4.3.4 [531b6] conflicts with parent dependency debug@npm:3.2.7 [65bed]
➤ YN0000: └ Completed in 0s 370ms
➤ YN0000: Failed with errors in 0s 643ms

要解决这个问题,您可以在本地下游存储库的 package.json 文件中,为每个失败的包在 resolutions 字段中添加一个手动条目。使用 Yarn 错误中引用的最大主版本号。

{
"resolutions": {
"@typescript-eslint/eslint-plugin": "portal:/path/to/your/typescript-eslint/packages/eslint-plugin",
"@typescript-eslint/parser": "portal:/path/to/your/typescript-eslint/packages/parser",
"debug": "4"
}
}

重新运行 yarn 应该会成功。