Публикация проекта TypeScript в NPM без исходного кода - PullRequest
1 голос
/ 26 мая 2019

Проблема: Я построил библиотеку, в которой много структурированных папок .ts. Теперь я хочу опубликовать эту библиотеку, но не хочу делиться с Source (файлы машинописи).

Попытка: Когда я запускаю команду 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 файл? Или я двигаюсь в неправильном направлении?

Я уже видел много ответов по stackoverflow и учебникам на youtube, каждый из которых показывает простой пример, в котором есть только один файл index.ts и файл index.d.ts, соответствующий ему. Но я не могу найти идеальный способ решить мою цель.

Спасибо за чтение моего вопроса, любая помощь приветствуется.

1 Ответ

2 голосов
/ 26 мая 2019

Вот как я могу это сделать:

  1. Создайте файл index.ts в каждой папке, который экспортирует типы, которые имеют значение для пользователей библиотеки.Например: src/lib/constants/index.ts, src/lib/models/index.ts, ... Каждый из файлов index.ts экспортирует все типы TypeScript, существующие в его папке, а также все файлы index.ts из его подпапок.
  2. Создайте центральный src/index.ts файл, который экспортирует все из всех подпапок src/....
  3. В вашем package.json добавьте запись types: "dist/index.d.ts".
  4. В вашем.npmignore file, добавьте запись src/.

При таком подходе все ваши операции импорта будут ссылаться в одном центральном файле 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

Ваш файл 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...