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

RequireJS搭配TypeScript运行报exports未定义等错误排查

问题根因&修复方案

你踩的全是写代码时很容易看漏的低级书写/配置错误,根本不是什么复杂的配置兼容问题:

  • 路径完全对不上
    你自己列的项目根目录下只有functions/文件夹,根本没有src/这个目录,但test.ts里的导入路径写的是./src/functions,连你自己描述文件位置都写混了,一会儿说文件在functions/functions.ts一会儿说在src/functions.ts。要么把放functions.ts的文件夹改名叫src,要么把导入路径改成./functions/functions,保证编译后的js文件路径和导入规则能匹配上。
  • script标签写了语法错误,导致requireJS直接失效
    你引入require.js的标签里,src="lib/require.js"后面多了个完全多余的逗号:
    <!-- 错误代码 -->
    <script src="lib/require.js", data-main="test"></script>
    
    HTML标签属性之间不需要加逗号分隔,这个多余的符号会让浏览器直接忽略后面的data-main="test"属性,requireJS拿不到入口文件配置,根本不会按AMD规范走依赖加载流程。你之前加var exports = {}的hack之后报的模块上下文错误,本质就是加载链路从根上就错了。把这个逗号删掉就行。
  • TypeScript编译配置不全,残留旧编译产物
    你现在的tsconfig.json只写了基础编译选项,没指定要编译的文件范围,也没配置输出路径。最开始报exports is not defined的核心原因,大概率是你之前把module配置成CommonJS的时候编译过一版js文件,产物里带CommonJS特有的exports全局变量调用,浏览器环境根本没有这个变量,自然报错。
    改完的tsconfig可以参考这个:
    {
        "compilerOptions": {
            "target": "es6",
            "module": "amd",
            "moduleResolution": "node",
            "esModuleInterop": true,
            "outDir": "./"
        },
        "include": ["./*.ts", "./src/**/*.ts"],
        "resolveJsonModule": true
    }
    
    改完配置先把目录里之前残留的所有.js编译产物全删了,重新执行tsc命令把ts编译成AMD规范的js文件,再打开页面就能正常运行。
  • 额外提个小问题:你列的目录里node-modules文件夹名写错了,Node.js的依赖目录正确名称是node_modules(是下划线不是中划线),现在你只装了typescript不影响运行,后面装第三方依赖肯定出问题,顺手改了就行。

别瞎加var exports = {}这种补丁式hack,只会破坏AMD模块的加载上下文,半毛钱用都没有。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:21:36