加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

typescript – Angular 2:ReferenceError:require未定义(…),a

发布时间:2020-12-17 17:41:36 所属栏目:安全 来源:网络整理
导读:编辑: 我还没弄清楚为什么它不起作用,但我从头开始并获得了working version.似乎没有必要将system.src.js放在角度脚本标签之前,按照下面的答案之一调整.查看工作版本和Angular 2 tutorial. 原始问题: 我正在努力学习Angular 2和Express.我一般都遵循this指
编辑:

我还没弄清楚为什么它不起作用,但我从头开始并获得了working version.似乎没有必要将system.src.js放在角度脚本标签之前,按照下面的答案之一调整.查看工作版本和Angular 2 tutorial.

原始问题:

我正在努力学习Angular 2和Express.我一般都遵循this指南.我收到以下错误:

ReferenceError: require is not defined(…) angular2-polyfills.js:1243 
Zone.run @ angular2-polyfills.js:1243
zoneBoundFn @ angular2-polyfills.js:1220
lib$es6$promise$$internal$$tryCatch @ angular2-polyfills.js:468
lib$es6$promise$$internal$$invokeCallback @ angular2-polyfills.js:480
lib$es6$promise$$internal$$publish @ angular2-polyfills.js:451
lib$es6$promise$$internal$$publishRejection @ angular2-polyfills.js:401
(anonymous function) @ angular2-polyfills.js:123
Zone.run @ angular2-polyfills.js:1243
zoneBoundFn @ angular2-polyfills.js:1220
lib$es6$promise$asap$$flush @ angular2-polyfills.js:262

编辑:here是GitHub上项目的破碎版本.

我的项目结构如下:

application
|__client
   |__app
      |__main.ts
      |__main.js
      |__tsconfig.json
   |__typings/ (...)
   |__index.html
   |__typings.json
|__server
   |__server.ts
   |__server.js
   |__tsconfig.json
   |__typings.json
|__node_modules/ (...)

文件server.ts是这样的:

import * as express from "express";
let path = require("path");

let app = express();

let PORT = 8080;

app.use("/node_modules",express.static(__dirname + "/../node_modules"));
app.use("/app",express.static(__dirname + "/../client/app"));

app.get("/",(req,res) => {
  res.sendFile(path.resolve(__dirname,"..","client","index.html"));
});

app.listen(PORT,() => { console.log("Listening on port " + PORT)});

main.ts文件是这样的:

import {Component} from "angular2/core";
import {bootstrap} from "angular2/platform/browser";

@Component({
  selector: "app",template: "<h1>Hello world</h1>"
})
export class AppComponent {}

bootstrap(AppComponent);

index.html文件是这样的:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title></title>

  <script src="node_modules/systemjs/dist/system.src.js"></script>
  <script src="node_modules/es6-shim/es6-shim.min.js"></script>
  <script src="node_modules/systemjs/dist/system-polyfills.js"></script>

  <script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
  <!-- <script src="node_modules/systemjs/dist/system.src.js"></script> --> 
  <script src="node_modules/rxjs/bundles/Rx.js"></script>
  <script src="node_modules/angular2/bundles/angular2.dev.js"></script>
  <script>
    System.config({
      packages: {
        app: {
          format: "register",defaultExtension: "js"
        }
      }
    });
    System.import("app/main")
      .then(null,console.error.bind(console));
  </script>
</head>

<body>
  <app></app>
</body>

</html>

tsconfig.json文件都是这样的:

{
    "compilerOptions": {
        "target": "es5","module": "system","moduleResolution": "node","isolatedModules": false,"jsx": "react","experimentalDecorators": true,"emitDecoratorMetadata": true,"declaration": false,"noImplicitAny": true,"removeComments": false,"noLib": false,"preserveConstEnums": true,"suppressImplicitAnyIndexErrors": true
    },"exclude": [
        "node_modules","typings/browser","typings/browser.d.ts"
    ],"compileOnSave": true,"buildOnSave": false,"atom": {
        "rewriteTsconfig": false
    }
}

谢谢.

解决方法

angular2-polyfills.js是一个SystemJs包,所以它需要已经安装了SystemJs.

消息需要的是未定义的意思,因为require是systemjs用来导入模块的函数.要解决此问题,请将system.src.js移到顶部,并使其成为页面的第一个脚本:

<script src="node_modules/systemjs/dist/system.src.js"></script>
... other script tags

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读