我正在尝试使用组件中模板的相对路径来使用systemjs。 (我想使用相对路径的原因是,ng-xi18n目前无法处理绝对路径。)我不想使用这个
moduleId: __moduleName
方法,但更像是:
templateUrl: require('../templates/app.html')
首先,tsc标记了一个未定义的错误
经过一些研究后,我发现有人可以在@ types / node中包含依赖项来使用require函数。
现在我这样做了,tsc编译没有错误但是如果我在浏览器中打开应用程序它会显示错误:
__ zone_symbol__error:错误:(SystemJS)require不是函数TypeError:require不是执行时的函数
由于我无法找到解决方案,我希望有人可以帮助一个疯狂的角质新手来解决这个问题。
提前致谢!!
以下是我的应用中的一些代码段。
的package.json:
{
"name": "test",
"version": "0.0.1",
"scripts": {
"start": "concurrently \"npm run tsc:w\" \"gulp serve\" ",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings",
"postinstall": "typings install",
"i18n": "ng-xi18n -p ./tsconfig.json"
},
"dependencies": {
"@angular/common": "~2.4.6",
"@angular/compiler": "~2.4.6",
"@angular/compiler-cli": "^2.4.6",
"@angular/core": "~2.4.6",
"@angular/forms": "~2.4.6",
"@angular/http": "~2.4.6",
"@angular/platform-browser": "~2.4.6",
"@angular/platform-browser-dynamic": "~2.4.6",
"@angular/platform-server": "^2.4.6",
"@angular/router": "~3.4.6",
"angular-in-memory-web-api": "~0.2.4",
"core-js": "^2.4.1",
"es6-shim": "^0.35.1",
"rxjs": "5.0.1",
"systemjs": "0.19.41",
"zone.js": "^0.7.4"
},
"devDependencies": {
"concurrently": "^3.1.0",
"lite-server": "^2.2.2",
"typescript": "^2.0.10",
"typings": "^1.2.0",
"gulp": "3.9.1",
"gulp-connect": "3.2.1",
"http-proxy-middleware": "0.13.0",
"@types/node": "^7.0.0"
}
}
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"outDir": "app/js",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"types": ["node"]
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
}
systemjs.config.js:
(function (global) {
System.config({
defaultJSExtension: true,
paths: {
'npm:': 'node_modules/'
},
map: {
app: 'app',
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'rxjs': 'npm:rxjs',
'angular-in-memory-web-api':'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js'
},
packages: {
app: {
main: './main.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
}
}
});
})(this);
app.component.ts:
import {Component} from '@angular/core';
import { LoginService } from '../services/login.service';
import { UserStatus } from '../models/userStatus';
import {SessionService} from "../services/session.service";
import {UserService} from "../services/user.service";
import {Router} from '@angular/router';
@Component({
selector: 'main-app',
template: require('../templates/app.html')
})
export class AppComponent {
}
答案 0 :(得分:1)
According to the SystemJS author:
未定义require语句在SystemJS中的ES模块,globals或System.register内部工作,因为这是专门针对CommonJS模块格式的。
相反,您可以使用SystemJS text plugin导入ES6样式的任何文本文件。所以组件看起来像这样:
n*n