SystemJS 打字稿打字冲突
SystemJS Typescript typing conflict
我目前正在研究 Angular2,来自 AngularJS 背景。在这方面,我也在研究 SystemJS 和 Typescript。
但是,我在使用 Typescript 类型和 SystemJS 获取 Angular2 运行 时遇到了问题。使用没有任何打字的 Typescript 可以按预期工作,但是一旦我尝试从 Angular2 打字加载任何模块,SystemJS 似乎无法解决它。
根据我的阅读,打字是随 angular2.dev.js 一起提供的,所以只要我导入它,就可以了吗?
该错误与 https://github.com/systemjs/systemjs/issues/610 有一些相似之处,但不幸的是他的解决方案对我不起作用。
不幸的是,我对 SystemJS 和 Typescript 的经验都是空的,我只是想建立一个系统来学习。所有库都是最新的,并且刚刚使用 npm 安装。生成的构建由 NodeJS Express 服务器托管,而 Typescript 文件及其类型不是。
我得到的错误是:
GET http://localhost:8000/angular2/angular2 404 (Not Found)
这是我的 'index.html' 的主要摘录:
<head>
<script src="assets/js/lib/traceur.js"></script>
<script src="assets/js/lib/system.src.js"></script>
<script src="assets/js/lib/Rx.js"></script>
<script src="assets/js/lib/angular2.dev.js"></script>
<script>
System.config({
packages: {
assets: {
format: 'register',
defaultExtension: 'js'
},
}
});
System.import( 'assets/js/boot' )
.then( null, console.error.bind( console ));
</script>
</head>
boot.ts 打字稿文件(我只添加了 bootstrap(),因此 angular2 实际上包含在编译中):
import { bootstrap } from 'angular2/angular2';
bootstrap();
console.log( 'test' );
以及 tsc 编译后的结果 boot.js:
System.register(['angular2/angular2'], function(exports_1) {
var angular2_1;
return {
setters:[
function (angular2_1_1) {
angular2_1 = angular2_1_1;
}],
execute: function() {
angular2_1.bootstrap();
console.log('test');
}
}
});
//# sourceMappingURL=boot.js.map
tsdconfig.json:
{
"compilerOptions": {
"target": "ES5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
非常感谢您的帮助,祝您假期愉快! :)
根据我的说法,您必须将 index.html 设置为特定方式,我发现启动的最佳设置是 https://github.com/pkozlowski-opensource/ng2-play/blob/master/index.html。
你也可以在这里参考我的项目 setup/structure 的 repo
我的 index.html 是
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script>
System.config({
defaultJSExtensions: true,
map: {
rxjs: 'node_modules/rxjs'
},
packages: {
rxjs: {
defaultExtension: 'js'
}
}
});
</script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/router.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>
<script>
System.import('dist/bootstrap');
</script>
进一步了解更多信息,我只是为其他人写下此列表,这可能对某人有帮助
import {Component, View, Directive, Input, Output, Inject, Injectable, provide} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {CORE_DIRECTIVES, FORM_DIRECTIVES, NgClass, NgIf NgForm, Control, ControlGroup, FormBuilder, Validators} from 'angular2/common';
import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, Router, LocationStrategy, HashLocationStrategy} from 'angular2/router';
import {Http, HTTP_PROVIDERS, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http'
我目前正在研究 Angular2,来自 AngularJS 背景。在这方面,我也在研究 SystemJS 和 Typescript。
但是,我在使用 Typescript 类型和 SystemJS 获取 Angular2 运行 时遇到了问题。使用没有任何打字的 Typescript 可以按预期工作,但是一旦我尝试从 Angular2 打字加载任何模块,SystemJS 似乎无法解决它。
根据我的阅读,打字是随 angular2.dev.js 一起提供的,所以只要我导入它,就可以了吗?
该错误与 https://github.com/systemjs/systemjs/issues/610 有一些相似之处,但不幸的是他的解决方案对我不起作用。
不幸的是,我对 SystemJS 和 Typescript 的经验都是空的,我只是想建立一个系统来学习。所有库都是最新的,并且刚刚使用 npm 安装。生成的构建由 NodeJS Express 服务器托管,而 Typescript 文件及其类型不是。
我得到的错误是:
GET http://localhost:8000/angular2/angular2 404 (Not Found)
这是我的 'index.html' 的主要摘录:
<head>
<script src="assets/js/lib/traceur.js"></script>
<script src="assets/js/lib/system.src.js"></script>
<script src="assets/js/lib/Rx.js"></script>
<script src="assets/js/lib/angular2.dev.js"></script>
<script>
System.config({
packages: {
assets: {
format: 'register',
defaultExtension: 'js'
},
}
});
System.import( 'assets/js/boot' )
.then( null, console.error.bind( console ));
</script>
</head>
boot.ts 打字稿文件(我只添加了 bootstrap(),因此 angular2 实际上包含在编译中):
import { bootstrap } from 'angular2/angular2';
bootstrap();
console.log( 'test' );
以及 tsc 编译后的结果 boot.js:
System.register(['angular2/angular2'], function(exports_1) {
var angular2_1;
return {
setters:[
function (angular2_1_1) {
angular2_1 = angular2_1_1;
}],
execute: function() {
angular2_1.bootstrap();
console.log('test');
}
}
});
//# sourceMappingURL=boot.js.map
tsdconfig.json:
{
"compilerOptions": {
"target": "ES5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
非常感谢您的帮助,祝您假期愉快! :)
根据我的说法,您必须将 index.html 设置为特定方式,我发现启动的最佳设置是 https://github.com/pkozlowski-opensource/ng2-play/blob/master/index.html。
你也可以在这里参考我的项目 setup/structure 的 repo
我的 index.html 是
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script>
System.config({
defaultJSExtensions: true,
map: {
rxjs: 'node_modules/rxjs'
},
packages: {
rxjs: {
defaultExtension: 'js'
}
}
});
</script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/router.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>
<script>
System.import('dist/bootstrap');
</script>
进一步了解更多信息,我只是为其他人写下此列表,这可能对某人有帮助
import {Component, View, Directive, Input, Output, Inject, Injectable, provide} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {CORE_DIRECTIVES, FORM_DIRECTIVES, NgClass, NgIf NgForm, Control, ControlGroup, FormBuilder, Validators} from 'angular2/common';
import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, Router, LocationStrategy, HashLocationStrategy} from 'angular2/router';
import {Http, HTTP_PROVIDERS, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http'