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

ANTLR4 TypeScript目标找不到模块及相关属性问题如何解决

问题根因

  • 缺失模块解析配置:当前tsconfig.json未配置moduleResolution字段,TypeScript 3.5.3在target设置为es6时默认使用classic模块解析策略,不会检索node_modules目录下的第三方包,因此无法识别antlr4ts依赖。
  • 生成文件导入路径错误:main.ts中导入antlr4ts生成的词法、语法分析器时未添加相对路径前缀,TypeScript会将其识别为第三方包而非本地文件,触发找不到模块或属性不存在的报错。
  • 若使用全局安装的antlr4ts-cli生成语法文件,可能出现cli版本与项目依赖的antlr4ts版本不匹配的情况,也会触发Property 'exitRule' does not exist类报错。

解决方案

1. 修改tsconfig.json配置

在compilerOptions中新增moduleResolution、esModuleInterop配置,修改后完整配置如下:

{
  "compilerOptions": {
    "outDir": "output",
    "target": "es6",
    "lib": ["es6", "dom"],
    "moduleResolution": "node",
    "esModuleInterop": true
  },
  "include": ["./*"],
  "exclude": ["node_modules"]
}

2. 修正main.ts的导入路径

将本地生成的词法、语法分析器导入路径改为相对路径,修改后代码如下:

import { ANTLRInputStream, CommonTokenStream } from 'antlr4ts';
import { MyGrammarLexer } from './MyGrammarLexer';
import { MyGrammarParser } from './MyGrammarParser';

// Create the lexer and parser
let inputStream = new ANTLRInputStream("text");
let lexer = new MyGrammarLexer(inputStream);
let tokenStream = new CommonTokenStream(lexer);
let parser = new MyGrammarParser(tokenStream);

// Parse the input, where `compilationUnit` is whatever entry point you defined
let tree = parser.r();

3. 重新执行构建流程

按顺序执行以下命令:

  • 安装依赖:npm install
  • 生成语法对应的TS文件:npm run antlr4ts
  • 编译TypeScript代码:npm run compile-typescript
  • 运行测试:node output/main.js

如果之前使用过全局安装的antlr4ts-cli,先执行npm uninstall -g antlr4ts-cli卸载全局版本,避免版本不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:09:02