Ich habe eine Node.js & AngularJS App geschrieben in TypeScript, in dem ich versuche, Module mit System.js zu laden.Laden von Modulen in TypeScript mit System.js
Es funktioniert gut, wenn ich nur eine Klasse importieren, um einen Typ anzugeben. z:
import {BlogModel} from "./model"
var model: BlogModel;
Allerdings, wenn ich versuche, eine Variable mit einer importierten Klasse zu instanziiert, ich eine Ausnahme zur Laufzeit zu bekommen. z:
import {BlogModel} from "./model"
var model: BlogModel = new BlogModel();
Uncaught ReferenceError: require is not defined
I Commonjs verwenden. Ich kann AMD nicht verwenden, weil ich ein Projekt sowohl für die Serverseite als auch für die Clientseite habe. Aus diesem Grund verwende ich System.js, um Module im Client zu laden.
Dies ist meine System.js Definition:
<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>
Dies ist der Inhalt der Datei 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;
}
}
Und das ist die JS Linie, die die Ausnahme erzeugt:
var model_1 = require("./model");
Uncaught ReferenceError: require is not defined
Jede Hilfe wird sein zutiefst geschätzt!
ich nehme an, dass model.ts die Definition für 'BlogModel' enthält, können Sie den Code dafür teilen, müssen Sie auch systemjs in der HTML-Hauptseite importiert haben, können Sie Code dafür auch teilen? Im Idealfall müssen Sie nicht alle Module importieren und es wird bei Bedarf geladen, also System.import ('classes.ts') .then (null, console.error.bind (console)); sollte ausreichen, auch brauchen Sie nicht ts Erweiterung, –
@Madhu Ranjan Ich habe die ursprüngliche Frage bearbeitet und fügte den Inhalt von model.ts und die Skript-Tags für System.js – Alon