没有源代码将TypeScript项目发布到NPM

时间:2019-05-26 10:50:23

标签: node.js typescript npm

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

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

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

不会生成单个tsc文件

我看到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文件方法正确吗?还是我朝错误的方向前进?

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

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

1 个答案:

答案 0 :(得分:2)

这就是我的做法:

  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';