将 TypeScript 项目发布到 NPM,无需源代码

Rah*_*rma 4 node.js npm typescript

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

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

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

我在 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
Run Code Online (Sandbox Code Playgroud)

明明没有index.d.ts文件,怎么获取单个文件呢?单.d.ts文件方法正确吗?或者我正在走向错误的方向?

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

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

fjc*_*fjc 5

我的做法是这样的:

  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文件中,添加 aasrc/条目。

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


以下是您的目录结构最终的样子。我排除了该dist文件夹,但每个文件夹中也会生成一个index.js和文件:index.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
Run Code Online (Sandbox Code Playgroud)

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

export * from './some_constant_file1.ts'
Run Code Online (Sandbox Code Playgroud)

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

export * from './constants';
export * from './models';
export * from './util';
Run Code Online (Sandbox Code Playgroud)

您的src/index.ts文件:

export * from './lib';
Run Code Online (Sandbox Code Playgroud)