Commonjs 库的 index.ts 作为外部模块
Commonjs library's index.ts as external module
我需要一些指导才能正确开发可重用的 commonjs 库(npm 包)。
假设库结构如下:
—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’;
…
因为这将删除逻辑分组并且将来可能导致名称冲突
我也试过 index.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'
{
}
因为它们不在类型声明中space(如果它们不在名称space中,有没有办法将它们复制到那里?)
我尝试过的另一个选择是使用 outFile + amd 为整个库生成单个 d.ts 文件。但是那个文件不是外部模块。
所以我的问题是 - 如何编写 index.ts 使其成为外部模块并导出库公开的所有功能。
提前致谢。
浪费了一天的时间,我想出了一个丑陋的解决方案。
为了保持导出的 commonjs 库的嵌套结构,你必须在每个 'level' 中放置它自己的 index.ts
,它将聚合并重新导出相同 'level' 的所有功能。对于我上面的示例,它看起来像:
—lib
——Helper.ts
——Serialization.ts
——meta
——— index.ts
——— Entity.ts
—index.ts
其中root 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};
和meta/index.ts:
export * from './Entity';
我真的很高兴知道这个常见的(?)任务是否可以在没有额外文件的情况下解决 'level'。
我需要一些指导才能正确开发可重用的 commonjs 库(npm 包)。 假设库结构如下:
—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’;
…
因为这将删除逻辑分组并且将来可能导致名称冲突
我也试过 index.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'
{
}
因为它们不在类型声明中space(如果它们不在名称space中,有没有办法将它们复制到那里?)
我尝试过的另一个选择是使用 outFile + amd 为整个库生成单个 d.ts 文件。但是那个文件不是外部模块。
所以我的问题是 - 如何编写 index.ts 使其成为外部模块并导出库公开的所有功能。
提前致谢。
浪费了一天的时间,我想出了一个丑陋的解决方案。
为了保持导出的 commonjs 库的嵌套结构,你必须在每个 'level' 中放置它自己的 index.ts
,它将聚合并重新导出相同 'level' 的所有功能。对于我上面的示例,它看起来像:
—lib
——Helper.ts
——Serialization.ts
——meta
——— index.ts
——— Entity.ts
—index.ts
其中root 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};
和meta/index.ts:
export * from './Entity';
我真的很高兴知道这个常见的(?)任务是否可以在没有额外文件的情况下解决 'level'。