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

能否在ESLint中使用ts-morph并共享其project对象?

在ESLint中共享ts-morph Project对象的实现方案

可以实现,核心思路是利用ESLint的共享上下文机制或自定义插件的初始化逻辑,全局复用ts-morph的Project实例,避免重复加载项目。以下是具体实现步骤:

1. 自定义插件内全局初始化复用

在你的ESLint插件入口文件中,提前初始化ts-morph的Project对象,然后将其挂载到规则的上下文对象中,供所有规则直接使用:

// eslint-plugin-your-plugin/index.js
const { Project } = require('ts-morph');

// 全局初始化ts-morph项目,仅执行一次
const tsMorphProject = new Project({
  tsConfigFilePath: './tsconfig.json',
  // 根据项目需求配置其他参数
});

module.exports = {
  rules: {
    'custom-rule-1': {
      create(context) {
        // 将实例挂载到context自定义属性
        context.tsMorphProject = tsMorphProject;
        return {
          Program(node) {
            // 直接复用全局实例
            const sourceFile = tsMorphProject.getSourceFile(context.getFilename());
            // 执行全项目类型检查或函数调用分析
          }
        };
      }
    },
    'custom-rule-2': {
      create(context) {
        // 同样可访问全局实例
        const project = context.tsMorphProject;
        return {
          // 规则逻辑
        };
      }
    }
  }
};

2. 跨插件共享实例(通过ESLint配置)

如果需要在多个独立插件间共享ts-morph实例,可以通过ESLint配置文件的settings字段传递初始化好的Project对象:

// .eslintrc.js
const { Project } = require('ts-morph');

const tsMorphProject = new Project({
  tsConfigFilePath: './tsconfig.json'
});

module.exports = {
  settings: {
    tsMorphProject: tsMorphProject
  },
  plugins: ['your-plugin', 'third-party-plugin'],
  rules: {
    'your-plugin/custom-rule-1': 'error',
    'third-party-plugin/some-rule': 'error'
  }
};

之后在任意插件的规则中,通过context.settings.tsMorphProject访问实例:

// 第三方插件的规则实现
create(context) {
  const project = context.settings.tsMorphProject;
  // 使用实例完成分析操作
}

3. 关键注意事项

  • 避免重复初始化:务必保证ts-morph的Project实例只创建一次,不要在规则的create函数内重复初始化,否则会失去性能优势。
  • 文件同步:ESLint执行过程中若有文件修改,需调用tsMorphProject.refresh()同步文件状态,确保分析结果准确。
  • 类型支持:用TypeScript开发插件时,可扩展ESLint的RuleContext类型,添加tsMorphProject属性以获得类型提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:40:38