gpt4 book ai didi

node.js - 将 TypeScript 项目发布到 NPM,无需源代码

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:14 25 4
gpt4 key购买 nike

问题:我构建了一个库,该库在结构化文件夹中包含许多 .ts 文件。现在我想发布我的这个库,但不想共享源代码( typescript 文件)。

尝试:当我运行 tsc 命令时,它会生成与每个 .ts 文件相对应的 .js 文件。当我在 tsconfig.json 文件中保留 declaration: true 时,tsc 还会生成 .d.ts 文件每个 .ts 文件也是如此。

挑战:我的所有 .js 文件均按预期在结构上生成,但 .d.ts 也在并行位置生成.js 文件。现在的挑战是,通过这种方式,该库的任何使用者将如何导入类型,因为所有类型都分散在不同的文件夹中,因为 tsc< 没有生成单个 .d.ts 文件

我在 NPM 上看到许多模块(例如 https://github.com/winstonjs/winston ),它们发布单个 index.d.ts 文件,并且消费者导入它们以使用和利用 Typescript 的优势。

目前我的项目结构如下所示:

- my-project-root-directory
- src
- demo
- main.ts
- sample.ts
-lib
- constants
- some_constant_file1.ts
- models
- some_model_file1.ts
- some_model_file2.ts
- util
- some_util_file.ts
- dist
- demo
- main.js
- main.d.ts
- sample.js
- sample.d.ts
-lib
- constants
- some_constant_file1.js
- some_constant_file1.d.ts
- models
- some_model_file1.js
- some_model_file1.d.ts
- some_model_file2.js
- some_model_file2.d.ts
- util
- some_util_file.js
- some_util_file.d.ts
- logs
- package.json
- tsconfig.json

明显没有index.d.ts文件,如何获取单个文件?单个 .d.ts 文件方法是否正确?或者我正走向错误的方向?

我已经在 stackoverflow 和 youtube 上的教程上看到了很多答案,所有这些答案都显示了一个简单的示例,其中只有一个 index.ts 文件和与之对应的 index.d.ts 文件。但我找不到解决我的目的的完美方法。

感谢您阅读我的问题,欢迎任何帮助。

最佳答案

我的做法是这样的:

  1. 在每个文件夹中创建一个 index.ts 文件,导出对库使用者有意义的类型。例如:src/lib/constants/index.tssrc/lib/models/index.ts、...每个 index.ts 文件都会导出其文件夹中存在的所有 TypeScript 类型,以及其子文件夹中的所有 index.ts 文件。
  2. 创建一个中央 src/index.ts 文件,导出所有 src/... 子文件夹中的所有内容。
  3. package.json 中,添加 types: "dist/index.d.ts" 条目。
  4. 在您的 .npmignore 文件中,添加 src/ 条目。

通过这种方法,您可以在一个中央 dist/index.d.ts 文件中引用所有导入,因此库的使用者不需要从包内的不同位置导入类型。此外,您根本不分发 TypeScript 源代码。

<小时/>

以下是您的目录结构最终的样子。我排除了 dist 文件夹,但每个文件夹中也会生成 index.jsindex.d.ts 文件:

- my-project-root-directory
- src
- index.ts
- demo
- main.ts
- sample.ts
-lib
- constants
- some_constant_file1.ts
- index.ts
- models
- some_model_file1.ts
- some_model_file2.ts
- index.ts
- util
- some_util_file.ts
- index.ts
- logs
- package.json
- tsconfig.json

例如,您的 src/lib/constants/index.ts 文件可能如下所示:

export * from './some_constant_file1.ts'

您的src/lib/index.ts文件:

export * from './constants';
export * from './models';
export * from './util';

您的src/index.ts文件:

export * from './lib';

关于node.js - 将 TypeScript 项目发布到 NPM,无需源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com