关于systemjs:使用System.js在TypeScript中加载模块

Loading modules in TypeScript using System.js

我有一个的Node.js和AngularJS应用程序写在打字稿,其中我试图加载使用System.js模块。

如果我只导入一个类来指定一个类型,它工作正常。 例如:

1
2
import {BlogModel} from "./model"
var model: BlogModel;

但是,当我尝试使用导入的类实例化变量时,在运行时出现异常。 例如:

1
2
import {BlogModel} from "./model"
var model: BlogModel = new BlogModel();

Uncaught ReferenceError: require is not defined

我使用CommonJS。 我不能使用AMD,因为我在服务器端和客户端都有一个项目。 这就是为什么我使用System.js在客户端中加载模块的原因。

这是我的System.js定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <script src="/assets/libs/systemjs-master/dist/system-polyfills.js">
    <script src="/assets/libs/systemjs-master/dist/system.src.js">

   
        System.config({
            packages: {
                app: {
                    format: 'register',
                    defaultExtension: 'js'
                }
            }
        });
        System.import('classes.ts')
                .then(null, console.error.bind(console));
        System.import('model.ts')
                .then(null, console.error.bind(console));

这是model.ts文件的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import {User} from"./classes";
import {Post} from"./classes";

export class BlogModel{
    private _currentUser: User;
    private _posts: Post[];

    get currentUser(){
        return this._currentUser;
    }

    set currentUser(value: User){
        this._currentUser = value;
    }

    get posts(){
        return this._posts;
    }

    set posts(value: Post[]){
        this._posts = value;
    }
}

这是产生异常的JS行:

1
var model_1 = require("./model");

Uncaught ReferenceError: require is not defined

任何帮助将不胜感激!


让我们尝试简化一些事情:

1)如下配置您的systemjs:

1
System.defaultJSExtensions = true;

2)确保将您的classes.tsmodel.tsbootstrap.ts(这是您应该创建的新文件,将引导您的应用程序)文件都转入与index.html(index.html)位于同一目录中的文件。 应该包含用于配置如上所述的systemjs的脚本)

3)在bootstrap.ts中:

1
2
3
import {BlogModel} from "./model"
let model = new BlogModel();
console.log(model);

3)通过单次调用System.import引导您的应用程序:

1
System.import('bootstrap').then(null, console.error.bind(console));

尝试这些步骤,我想您会解决您的问题的。