未捕获的 ReferenceError:未定义导出并且需要

Posted

技术标签:

【中文标题】未捕获的 ReferenceError:未定义导出并且需要【英文标题】:Uncaught ReferenceError: exports is not defined and require 【发布时间】:2016-04-26 01:04:27 【问题描述】:

我正在使用 angularjs 和 typescript 创建一些应用程序,我遇到了无法解决的错误问题

这是我的 *.ts 代码

export var NgApp = new application.Startup();

///<reference path="../../../../../typings/tsd.d.ts"/>
import NgApp from "../../bootstrap";



module views.components.home 
    export class HomeComponent 
        public constructor() 
        

        public static factory():Function[] 
            return [
                () => new HomeComponent()
            ]
        

    



NgApp.registerComponents(views.components.home,() => this.app.controller);

这是我的 GULP 任务

let tsResult = gulp.src('src/**/*.ts').pipe(ts(
    module: 'commonjs',
    sourceMap: true
));

let taskTs = tsResult.js.pipe(gulp.dest('built/'));

这是我的错误: 未捕获的 ReferenceError:未定义导出

问题是:如何在打字稿中使用像 es6 这样的导入?我错过了什么?

【问题讨论】:

尝试用模块编译:“amd” @Amid nope 它没有帮助 我假设您的网页上有指向 system.js 的链接。您也可以尝试使用 angular2 快速入门指南中所述的 module:system 进行编译。 我正在使用 angularjs 1.5 我没有尝试过 1.5。但是对于 1.4,我在主 html 页面上将“amd”作为模块 + 引用到 angular.js 等,它成功了。 【参考方案1】:

我使用 Angular 1.6 和 webpack, 当我将模块更改为 "umd"

时,它对我有用

UMD:通用模块定义 支持两种样式(AMD 和 CommonJS)的“通用”模式

参考:http://davidbcalhoun.com/2014/what-is-amd-commonjs-and-umd/

这里粘贴的是我更改后的 tsconfig.json,我运行 $ tsc


  "compilerOptions": 
    "target": "es5",
    "module": "umd",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "es2015", "dom" ],
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "allowUnreachableCode": true
  ,
  "exclude": [
    "node_modules"
  ]

然后我的“exports is not defined”错误消失了。

【讨论】:

【参考方案2】:

click here“终于解决了”我也遇到了同样的错误,我将模块:“commonjs”更改为“模块”:“es6”,因为针对 ES5 删除了导入/导出语句,因此这些工具无法删除未使用的导出。


    "compilerOptions": 
    "target": "es5",
    "module": "es6",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "es2015", "dom" ],
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
    


【讨论】:

【参考方案3】:

如何在打字稿中使用像 es6 这样的导入?我错过了什么?

您需要使用模块加载器。这是一个使用 webpack 的示例:https://github.com/AngularClass/angular2-webpack-starter

【讨论】:

对不起,我使用 angularjs 1.5,实际上对 webpack 不太熟悉,我可以使用具有相同能力的 systemjs 来加载模块吗? 你可以。但它更前沿(对我来说没有必要,因为 webpack 已经完成了我需要的一切)

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

Angular AOT 和汇总 - 未捕获的 ReferenceError:未定义导出

React 16.14.0:未捕获错误 ReferenceError:未定义导出

visual studio typescript“未捕获的ReferenceError:未在...定义导出” [重复]

未定义函数 - 未捕获的 ReferenceError

未捕获的 ReferenceError:未定义 showCategory

未捕获的 ReferenceError:“$ 未定义”[重复]