2016-08-13 96 views
0

我需要一些指导来正确开发可重用的commonjs库(npm包)。 可以说库的结构如下:Commonjs库的index.ts作为外部模块

—lib 
——Helper.ts 
——Serialization.ts 
——meta 
——— Entity.ts 
—index.ts 

依此类推。每个文件都是外部模块。

现在我需要创建入口文件(比如说index.ts),它将公开库的功能并作为入口点。 在这里,我无法将自己的头围绕在创建它的方式上。我想保持嵌套结构,而不通过导出一切压扁它:

export * from './lib/Helper’; 
export * from './lib/Serialization’; 
export * from './lib/meta/Entity’; 
… 

因为这将删除逻辑分组,并可以在将来导致可能的名称冲突

我也曾尝试进行索引。 TS是这样的:

import {Helper} from './lib/Helper'; 
import * as Serialization from './lib/Serialization'; 
import * as Decorators from './lib/meta/Decorators'; 

let core = { 
    Helper: Helper, 
    Serialization: Serialization, 
    Meta: { 
     Entity: Entity, 
    } 
} 

export default core; 

它完美的作品,直到我来消耗进口类型是这样的:

import Core from ’nameOfTheNpmPackage'; 

let Entity = Core.Meta.Entity; 

function f(e: Entity)//<—This produce error cannot find name ‘Entity' 
{ 

} 

,因为它们不是在类型声明空间(有没有复制他们,如果他们不是在命名空间的方式?)

我曾尝试是产生单d.ts文件全库的另一种选择使用outFile + amd。但该文件不是外部模块。

所以我的问题是 - 如何写index.ts,以便它将是外部模块,并导出由库公开的所有功能。

在此先感谢。

回答

2

有一天浪费时间,我想出了丑陋的解决方案。 为了保持导出的commonjs库的嵌套结构,您必须在每个“级别”内部放置自己的index.ts,以聚合并重新导出相同“级别”的所有功能。在我的示例上面看起来像:

—lib ——Helper.ts ——Serialization.ts ——meta ——— index.ts ——— Entity.ts —index.ts

凡根index.ts:

export * from './lib/Helper'; 
export * from './lib/Serialization'; 

import * as S from './lib/Serialization'; //This is case where one file contains several exported classes that we want to keen as separate module 
export {S as Serialization}; 

import * as Meta from './lib/meta/index'; 
export {Meta}; 

和元/ index.ts:

export * from './Entity'; 

我会很高兴要知道这个常见的(?)任务是否可以在没有额外的文件级别的情况下解决。

相关问题