You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过lint规则等方案强制仅通过index文件跨模块导入

跨模块导入规范强制方案

你需要的导入限制规则完全可以通过现有工程化工具落地,以下是可直接复用的实现方案:


方案1:ESLint 插件 eslint-plugin-boundaries(通用灵活方案)

这是最适配你需求的开箱即用方案,支持自定义模块边界、导入规则,完美匹配你提到的「同模块可任意导入、跨模块仅允许导入index导出」的要求。

操作步骤

  1. 安装依赖
npm install eslint-plugin-boundaries --save-dev
  1. 修改ESLint配置文件(.eslintrc.json 示例):
{
  "plugins": ["boundaries"],
  "rules": {
    "boundaries/no-private": "error",
    "boundaries/no-unknown": "error"
  },
  "settings": {
    "boundaries/types": [
      // 定义app下的所有一级子目录为独立业务模块
      { "pattern": "app/*/", "type": "business-module" }
    ],
    "boundaries/allow": [
      // 规则1:允许同模块内任意路径导入
      ["business-module", "business-module", "same"],
      // 规则2:跨模块仅允许导入模块根路径(自动匹配index.ts导出)
      ["business-module", "business-module", { "importPath": "app/*" }]
    ]
  }
}

配置完成后,你示例中提到的无效导入import { retriever} from '../../dogs/activities/breeds'会直接触发ESLint错误,三个合法导入场景则可正常通过校验。


方案2:package.json exports 字段(TS/现代打包工具场景)

如果你用的是TypeScript + vite/webpack5等现代工具链,可以直接通过包导出规则从根源禁止深层导入,不需要依赖ESLint:

  1. 在每个独立模块的根目录(比如app/dogs、app/cats)下新建package.json文件,示例内容:
{
  "name": "@app/dogs",
  "exports": {
    ".": "./index.ts"
  }
}
  1. 在项目根目录的tsconfig.json中配置路径别名方便导入:
{
  "compilerOptions": {
    "paths": {
      "@app/*": ["./app/*"]
    }
  }
}

配置完成后,所有跨模块的深层导入都会直接触发TS路径不存在报错,仅导入@app/dogs、@app/cats这种模块根路径时才会正常识别。


内容的提问来源于stack exchange,提问作者HaveSpacesuit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:54:04