【发布时间】:2016-06-02 18:58:48
【问题描述】:
我有一个用 TypeScript 编写的 Node.js 和 AngularJS 应用程序,我正在尝试使用 System.js 加载模块。
如果我只导入一个类来指定一个类型,它就可以正常工作。例如:
import {BlogModel} from "./model"
var model: BlogModel;
但是,当我尝试使用导入的类实例化变量时,我在运行时遇到异常。例如:
import {BlogModel} from "./model"
var model: BlogModel = new BlogModel();
Uncaught ReferenceError: require is not defined
我使用 CommonJS。我不能使用 AMD,因为我有一个用于服务器端和客户端的项目。这就是我使用 System.js 在客户端加载模块的原因。
这是我的 System.js 定义:
<script src="/assets/libs/systemjs-master/dist/system-polyfills.js"></script>
<script src="/assets/libs/systemjs-master/dist/system.src.js"></script>
<script>
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));
</script>
这是model.ts文件的内容:
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 行:
var model_1 = require("./model");
Uncaught ReferenceError: require is not defined
任何帮助将不胜感激!
【问题讨论】:
-
我假设 model.ts 包含
BlogModel的定义,你能分享一下代码吗,而且你必须在主 html 页面中导入 systemjs,你也可以分享一下代码吗?理想情况下,您不必导入所有模块,它会在需要时加载,因此 System.import('classes.ts') .then(null, console.error.bind(console));应该足够了,你也不需要 ts 扩展, -
@Madhu Ranjan 我已经编辑了原始问题并添加了model.ts的内容和System.js的脚本标签
标签: typescript systemjs