首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将TypeScript项目无源发布到NPM

将TypeScript项目无源发布到NPM
EN

Stack Overflow用户
提问于 2019-05-26 18:50:23
回答 1查看 1K关注 0票数 3

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

尝试:当我运行tsc命令时,它会为每个.js文件生成一个.ts文件。当我将declaration: true保存在tsconfig.json文件中时,tsc还会为每个.ts文件生成.d.ts文件。

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

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

目前我的项目结构如下:

代码语言:javascript
复制
- 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文件的方法正确吗?还是我走错了方向?

我已经在youtube上看到了许多关于stackoverflow和教程的答案,它们都显示了一个简单的示例,其中只有一个index.ts文件和对应的index.d.ts文件。但是我找不到一个完美的方法来解决我的目的。

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

EN

回答 1

Stack Overflow用户

发布于 2019-05-27 01:39:22

下面是我的建议:

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

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

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

代码语言:javascript
复制
- 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文件可能如下所示:

代码语言:javascript
复制
export * from './some_constant_file1.ts'

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

代码语言:javascript
复制
export * from './constants';
export * from './models';
export * from './util';

您的src/index.ts文件:

代码语言:javascript
复制
export * from './lib';
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56312835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档