And*_*ann 12 javascript module shared-libraries typescript
我正在用通过 npm 发布的打字稿构建一个库。
在作为库起点的 index.ts 中,导出了所有公共类和枚举。
import { MyClass } from './internal/my-class'
import { MyEnum } from './internal/my-enum'
export { MyClass, MyEnum }
Run Code Online (Sandbox Code Playgroud)
这很有效,但我注意到用户也可以通过使用文件的直接路径来导入内部函数/类等。
// in a project that installed my library as an npm dependency
import { InternalClass } from 'my-lib/dist/internal/internal-class'
Run Code Online (Sandbox Code Playgroud)
有没有办法防止这种情况?
我需要“导出”,InternalClass因为我在整个库中导入和使用它,但我不想公开它。我尝试使用命名空间,但无法真正让它工作。
您应该stripInternal在您的tsconfig.json(或从命令行)中设置标志,true并将 tsdoc 注释与@internal标签一起使用。
// internal/my_file.ts
/** @internal */
export function myInternalFunction() {}
Run Code Online (Sandbox Code Playgroud)
请注意,这将从类型声明中删除该函数,因此它不会在编辑器中自动完成,但如果您确实需要隐藏内部细节,我建议您使用Rollup和 TypeScript 插件捆绑您的代码。
ΔO *_*ro' -2
我认为你不能。
我想你可以使用 TS 的模块编译成 JS 的 IIFE,如 Lucas Morgan 此处所述,但我这样做没有多大意义。如果您发布开源代码,就无法阻止任何人提取您的代码的任何部分。