道歉,如果这个问题有点不专心/漫无目的,但我在这里真正拥有的是几个相互关联的问题,我想立刻问一下。
假设我正在开发一个名为foo
的库,其中包含文件foo.ts
,bar.ts
和baz.ts
。 foo.ts
是库的根,即它依赖于其他两个并导出依赖应用程序可能需要的所有功能。假设我想将此库作为可加载AMD的模块提供。
在TypeScript中构造此代码的正确方法是什么?以下是我可以想到的方法:
在整个文件中使用/// <reference path="..."/>
,然后使用--out combined.js
将它们合并为一个大型库。但是,如果我这样做,我不知道如何将组合输出作为AMD模块提供给下游。如果我向export
模块添加foo
语句,它对组合文件没有影响,只生成foo.js
的requirejs包装版本。因此,似乎通过--out combined.js
组合内部模块,然后通过export
使组合结果的某些部分可用并不简单。我是否应该使用其他工具将连接结果包装在AMD样板中,避开TypeScript的import
/ export
功能?
制作foo.ts
,bar.ts
和baz.ts
所有外部模块,让它们相互依赖,例如import bar = require('./bar');
,并foo.ts
导出一个模块,该模块仅包含属于图书馆公共API的bar
和baz
部分。如果我走这条路线,那么默认情况下,由于我们使用的是AMD模块,所有文件都会单独下载,即使它们是高度相互依赖的,这似乎不太理想。但我可以使用requirejs优化器将生成的单个模块组合成一个大模块。但是,如果使用该库的应用程序也是用TypeScript编写的并且想要使用它的声明,那么它应该在哪里?当使用(1)中的--out combined.js
选项时,也可以为库获得组合.d.ts
,但是当使用外部模块时,我看不到如何执行此操作。下游应用程序代码是否应该进入源目录并获取单个声明文件,即foo.d.ts
,bar.d.ts
,baz.d.ts
?我应该手动创建一个引用所有自动生成的单例.d.ts
的主声明文件吗?
答案 0 :(得分:1)
这是我要做的。使用--out lib.js --declaration
标记除foo.ts
之外的所有文件。然后使用声明创建foo.ts
,例如假设:
bar.ts
:
module Foo{
export class Bar{
}
}
baz.ts
:
module Foo{
export class Baz{
}
}
您将获得的声明文件(由于--declaration
标志):
module Foo{
export class Bar{
}
export class Baz{
}
}
因此,您可以将Foo.ts
创建为:
/// <reference path="lib.d.ts"/>
declare module "Foo"{
export = Foo;
}
然后硬编码lib.dist.js
以加载--out js文件并导出到amd:
define([require,'lib'],function(){
return Foo;
});
<强>更新强>
如果您需要依赖第三方lib,请使用<amd-depenedency
中的Foo.ts
,并在其他部分使用Foo.ts
。
答案 1 :(得分:1)
新方式!忘记引用,只需将tsconfig.json文件放在项目的根目录下,所有文件都不会发生冲突。