我还没弄清楚为什么它不起作用,但我从头开始并获得working version。似乎没有必要将system.src.js
放在angular
脚本标记之前, pace 以下答案之一。查看工作版本和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
}
}
感谢。
答案 0 :(得分:6)
angular2-polyfills.js
是一个SystemJs包,所以它需要已经安装了SystemJs。
这就是消息require is not defined
的意思,因为require是systemjs用来导入模块的函数。要解决此问题,请将system.src.js
移至顶部,并将其设为页面的第一个脚本:
<script src="node_modules/systemjs/dist/system.src.js"></script>
... other script tags
答案 1 :(得分:0)
我今天刚开始使用角度4(从angular2升级)。
在我注射的auth课程之前,我添加了这个:
// declare var Auth0Lock: any;
declare let require: any;
let Auth0Lock = require('auth0-lock').default;