我正在尝试使 SystemJS 与 Typescript 一起使用,但它们似乎相互冲突。
如何利用 System.js 的自动加载而不与 Typescript 上的关键字冲突?使用 import / require 使 Typescript 使用它自己的方式来加载和引用文件,虽然它翻译export
为module.exports = ...
,但它对import
是否有可能实现这一点,或者我将不得不等待 Typescript 支持 ES6 关键字?
我正在尝试使 SystemJS 与 Typescript 一起使用,但它们似乎相互冲突。
如何利用 System.js 的自动加载而不与 Typescript 上的关键字冲突?使用 import / require 使 Typescript 使用它自己的方式来加载和引用文件,虽然它翻译export
为module.exports = ...
,但它对import
是否有可能实现这一点,或者我将不得不等待 Typescript 支持 ES6 关键字?
TypeScript 1.5 添加了对编译为 ES5 SystemJS 模块语法的支持。
编写一个类,如:
export class Foo {}
然后编译
tsc --module system foo.ts
结果将是一个使用 SystemJS 格式的 ES5 模块。
在 TypeScript 中,您将编写以下导入语句...
import dep = require('dep');
console.log(dep);
编译时,传递模块标志:
tsc --module commonjs app.ts
这告诉 TypeScript 以 CommonJS 样式模块为目标(如果需要,它也可以针对 AMD - SystemJS 支持这两种语法样式)。
输出如下所示:
var dep = require('dep');
console.log(dep);
此输出类似于SystemJS 文档中的以下示例。
// library resource
var $ = require('jquery'); // -> /lib/jquery.js
// format detected automatically
console.log('loaded CommonJS');
如果您需要更多帮助,您可以提出问题并附上说明问题的具体示例,我们将能够提供更具体的建议。
你可以在这里看到我使用 traceur 而不是 Typescript 的方式,但它应该与 Typescript 几乎相同,一旦我可以再次使用它,我会添加 ts。
注意:与其说是种子,不如说是自我提醒或游乐场
正如史蒂夫提到的 SystemJs 的最强点是你可以使用几乎任何模块定义,加载器应该检测模块格式,我个人更喜欢将模块声明为
define([deps...],(deps..){
// ...
})
我发现它就像来自其他语言和框架的构造函数注入模式,它总是转换为相同的 Javascript,因为它是 Javascript ,用类和箭头函数美化(+用类型注释的类型,例如 Typescript)。
还选择 amd 清楚地显示了异步意图,如果您选择让我们说 ES6 模块语法,那将是一种荣誉,因为 import 语句之后的代码只会在依赖项完成加载时执行。非常像 async 关键字,对于未启动的人来说感觉有点太神秘了
顺便说一句:和 OutOFcontext:SA / JHB 为 SystemJS 开发人员 Bedford 先生的出色工作干杯