将TypeScript NPM包打包成多个文件而不暴露内部组件

时间:2017-08-01 05:32:31

标签: node.js typescript npm

我有一个用TypeScript编写的NPM包,它设计用于Node.js应用程序。我在这个包中有类只有内部使用的方法,虽然我不能将它们标记为私有,因为它们被包中的其他组件使用。为了解决这个问题,我不从项目中导出类,当我将类的实例返回给调用者时,我将其类型转换为只有可公开访问的方法的接口。

这样可以正常工作,但是如果我想将我的项目分成更小的文件,我怎么能这样做而不必被迫导出我的类,并冒着滥用我的NPM模块的风险?

以下是我尝试做的简化示例:

档案:internal.ts

// Can I make this class not publicly accessible?
export class InternalClass {
    constructor() {

    }

    public sharedMethod(): void {
        // Accessible to users of the package
    }

    public protectedMethod(): void {
        // Only for use within the package
    }
}

档案:external.ts

import { InternalClass } from "./internal";

export interface ExternalInterface {
    sharedMethod(): void;
    // protectedMethod is not available outside the package
}

export function makeInterface(): ExternalInterface {
    return new InternalClass();
}

非常感谢任何有关如何做到这一点的想法。

1 个答案:

答案 0 :(得分:0)

我这样做的方法是控制npm包暴露的内容。

例如,如果我的package.json看起来像这样:

{
  ....
  "main": "dist/index.js",
  "typings": "typings/index.d.ts",
  ....
}

然后在相应的index.ts中我可以手动控制将作为包的一部分公开(导出)的内容。

export * from "./lib/Helper";
export * from "./lib/Log";

import * as M from "./lib/Maps";
export {M as Maps};

如果我有模块/课程,我不想访问"外部" - 我只是不将它作为index.ts或其引用子项的一部分导出。这并不禁止我在同一包内部导入和使用它。