当我在生产环境中加载页面时,出现以下错误:
获取http://example.com/Scripts/main.ts 404(未找到)错误: (SystemJS)XHR错误(404 Not Found)加载 http://example.com/Scripts/main.ts
我的开发不会发生。 ENV。
这在我的index.html文件中发生。我验证了所有路径都是正确的,路径中存在main.ts
文件。
<script src="/Scripts/systemjs.config.js"></script>
<script>
System.import('/Scripts/main.ts').catch(function(err){ console.error(err); });
</script>
如果我将main.ts
文件更改为main.js
延伸,则无 404错误。
这是我的systemjs.config.js文件:
(function (global) {
System.config({
transpiler: 'ts',
typescriptOptions: {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2015", "dom"],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true
},
meta: {
'typescript': {
"exports": "ts"
}
},
paths: {
'npm:': 'https://unpkg.com/'
},
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/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
'@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js',
'rxjs': 'npm:rxjs@5.0.1',
'ts': 'npm:plugin-typescript@5.2.7/lib/plugin.js',
'typescript': 'npm:typescript@2.0.10/lib/typescript.js',
},
packages: {
app: {
format: 'register',
main: '/Scripts/main.ts',
defaultExtension: 'ts'
},
rxjs: {
defaultExtension: 'js'
}
}
});
})(this);
答案 0 :(得分:2)
您的浏览器不了解TypeScript,只有TypeScript编译器才能理解。 TypeScript编译器的输出是JavaScript,因此main.js
是要导入的正确文件。
答案 1 :(得分:0)
请不要理会@Cobus Kruger的回答,他非常缺乏帮助。
在开发期间直接在浏览器中导入TypeScript文件(或动态捆绑它们)就像您尝试这样做一样完全有效。绝对不需要运行gulp任务或任何类似的东西来编译你的TypeScript用于开发或生产包。
您只有一些小的配置错误。
请注意下面的更新配置。我在更改周围添加了额外的空白
function (global) {
System.config({
defaultJSExtensions: true,
baseURL: "/",
transpiler: 'ts',
typescriptOptions: {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2015", "dom"],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true
},
paths: {
'npm:': 'https://unpkg.com/'
},
map: {
'@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/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
'@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js',
'rxjs': 'npm:rxjs@5.0.1',
'ts': 'npm:plugin-typescript@5.2.7/lib/plugin.js',
'typescript': 'npm:typescript@2.0.10/lib/typescript.js',
},
packages: {
// note the differences particularly here
app: {
// assuming Scripts is a subdir of app
main: 'Scripts/main.ts',
defaultExtension: 'ts',
meta: {
"*.ts": {
loader: "ts"
},
"*.js": {
loader: "ts"
}
}
}
}
});
})(this);
最后改变您的浏览器引导,以便您拥有以下
<script src="/Scripts/systemjs.config.js"></script>
<script>
System.import('app').catch(function(err){ console.error(err); });
</script>
不,我们从我们可以想到的应用包中导入哪些会给我们 main.ts
根据脚本文件夹与应用文件夹相关的位置,您可能需要进行一些更改,但显然是来自错误的目录。
如果您实际上没有包含 main.ts 的名为 app 的文件夹,只需更改packages
中的包名称即可上面的属性从应用到脚本,然后是System.import('Scripts')
。