Node.js 在不公开内部组件的情况下,将TypeScript NPM包分解为多个文件
我有一个用TypeScript编写的NPM包,它被设计用于Node.js应用程序。我在这个包中有一些类,它们的方法只在内部使用,尽管我不能将它们标记为私有,因为它们被包中的其他组件使用。为了解决这个问题,我不从项目中导出该类,当我将该类的实例返回给调用方时,我将其转换为一个只有公共可访问方法的接口 这很好,但是如果我想将我的项目分解成更小的文件,我如何才能做到这一点而不被迫导出我的类,并冒着滥用我的NPM模块的风险 下面是一个我正在尝试做的简化示例: 文件:internal.tsNode.js 在不公开内部组件的情况下,将TypeScript NPM包分解为多个文件,node.js,typescript,npm,Node.js,Typescript,Npm,我有一个用TypeScript编写的NPM包,它被设计用于Node.js应用程序。我在这个包中有一些类,它们的方法只在内部使用,尽管我不能将它们标记为私有,因为它们被包中的其他组件使用。为了解决这个问题,我不从项目中导出该类,当我将该类的实例返回给调用方时,我将其转换为一个只有公共可访问方法的接口 这很好,但是如果我想将我的项目分解成更小的文件,我如何才能做到这一点而不被迫导出我的类,并冒着滥用我的NPM模块的风险 下面是一个我正在尝试做的简化示例: 文件:internal.ts // Can
// 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();
}
任何关于如何做好这一点的想法都将不胜感激。我这样做的方式是通过控制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
或其引用子级的一部分导出。但这并不禁止我在同一软件包中导入并在内部使用它。谢谢。这看起来应该能奏效。当我能够尝试实现此方法时,我将再次发表评论。当我尝试此方法时,我发现我仍然需要包含来自内部内容的打字文件,因为index.d.ts本身并不包含这些类型,而是引用其他打字文件。因此,用户可以通过直接引用文件来导入内部类型。例如:import{InternalClass}来自“my npm module/internal.d.ts”
我能够通过将所有代码拆分为公共/私有文件并仅在npm包中包含公共类型定义文件来克服这个问题。由于类型定义文件当时未包含在私有文件中,因此无法在TypeScript中导入这些文件。不完全是气密的,但总比将所有代码放在一个文件中要好。
export * from "./lib/Helper";
export * from "./lib/Log";
import * as M from "./lib/Maps";
export {M as Maps};