打字稿 - 未捕获的 ReferenceError:未定义导出

Posted

技术标签:

【中文标题】打字稿 - 未捕获的 ReferenceError:未定义导出【英文标题】:Typescript - Uncaught ReferenceError: exports is not defined 【发布时间】:2018-01-21 23:10:06 【问题描述】:

我在尝试在主 app.ts 中导入其他 ts 文件时收到此错误消息(未捕获的 ReferenceError:未定义导出

app.ts

import  LanguagesConfigs  from './LanguagesConfigs';
let languagesConfigs = new LanguagesConfigs();

LanguagesConfigs.ts

export class LanguagesConfigs 
 code

tsconfig.json


    "compilerOptions": 
        "target": "es5",
        "module": "commonjs",
        "sourceMap": true
    

我在 Visual Studio 代码中编译它。它生成 .js 和 .js.map 文件

注意:我没有使用像 angular 这样的框架,只是简单的打字稿。 注2:CommonJS安装在项目中(Typescript ReferenceError: exports is not defined)

【问题讨论】:

你能提到你正在使用的打字稿版本吗? tsc -v 打字稿 2.4.2 npm 3.10.10 似乎对我有用。你能分享更多信息吗? LanguageConfigs 文件名虽然与具有 LanguageSConfigs 的导入不同,但我假设您在本地拥有正确的名称 是的,我在本地有正确的名称。我会编辑它 【参考方案1】:

当您在代码中使用export 而在tsconfig.json 中使用"module": "commonjs" 时,结果代码将采用commonjs 模块样式。

例如:

export class Foo

会结果是:

.
.
.
exports.Foo = Foo;

因此,当您尝试运行结果js 代码时,如果环境不支持commonjs,您将收到此错误。

例如,浏览器不支持commonjs,但nodejs 支持。 您可以使用webpack 将commonjs 支持添加到浏览器,或者只需添加browserify

【讨论】:

使用 npm 全局安装了 browserify,但我仍然收到错误消息! “全局安装”是什么意思?您还必须在 html 中包含脚本... 我的意思是,安装了browserify,尝试制作一个bundle.js,将它包含在带有脚本标签的html中,但没有。 运行browserify -e app.js -o bundle.js 应该创建一个在浏览器上工作的js文件。 谢谢,成功了。但是有必要使用browserify吗? typescript 本身不支持 import 语句吗?

以上是关于打字稿 - 未捕获的 ReferenceError:未定义导出的主要内容,如果未能解决你的问题,请参考以下文章

带有 Jest 的打字稿 - “ReferenceError:未定义 beforeAll”

打字稿和电子出口未定义

ReferenceError:全局未在xml2js中定义

打字稿:在没有实际扩展/扩大的情况下捕获/推断类型的约束

使用打字稿从数组json响应中捕获数据

如何对这个从管道可观察到的错误捕获的 Angular 打字稿 Http 错误拦截器进行单元测试?