Как удалить выходную папку из операторов импорта для пользователей моего пакета? - PullRequest
1 голос
/ 27 сентября 2019

У меня есть проект на основе Typescript с несколькими .d.ts файлами, которые я хочу экспортировать как npm пакет и использовать в другом проекте.

В этом другом проекте я хочу иметь возможность вызывать:

import {Foo} from "@my-company/project-name/x/y/Foo"

Структура моего проекта выглядит следующим образом:

<project_root>
|_ node_modules
|_ src
|  |_ x
|     |_ y
|     |  |_ Foo.ts
|     |_ Bar.ts
|_ package.json
|_ tsconfig.json

Мой tsconfig.json файл:

{
  "compilerOptions": {
    "module": "es2015",
    "esModuleInterop": true,
    "target": "es6",
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "declaration": true
  },
  "lib": ["es2015"],
  "include": [
    "src"
  ],
  "exclude": [
    "node_modules"
  ]
}

Результатом работы tsc является то, чтоСоздается папка dist, содержащая файлы d.ts и файлы .js.При запуске npm pack я получаю файл .tgz, содержащий следующую структуру.

Обратите внимание, что в структуру каталога входит папка dist .

package
 |_ dist
 |  |_...
 |_ package.json

В результате я не могу написать

import {Foo} from "@my-company/project-name/x/y/Foo"

, но вместо этого должен написать

import {Foo} from "@my-company/project-name/dist/x/y/Foo"

(обратите внимание на дополнительные dist в пути).

Основываясь на документации узла , я решил исправить это, добавив в свой файл package.json следующее:

  "exports": {
    "./": "./dist/"
  }

но это, похоже, никак не влияет.Импорт не может быть найден, пока я не добавлю дополнительные dist к пути.

Я нашел лот из прочее posts all с :

  • Решения, которые выглядят очень сложными или связаны с конкретной системой сборки
  • Решения, которыеприменять специальные меры к пользователям моего пакета (например, использовать параметры компилятора)
  • Решения / предложения в закрытых вопросах Github (закрыто! = исправлено)
  • Старые (более 2-х лет) сообщения, вероятнодо того, как опция exports была доступна.

Я бы предпочел просто заставить эту опцию exports работать.Кто-нибудь есть идеи, что мне не хватает в моей настройке или делать неправильно?Я очень новичок во всей экосистеме JS / TS / npm, поэтому думаю, что могу упустить из виду то, что очевидно для ветеранов.

На данный момент я нашел обходной путь - вручную создать tgzфайл и удалите папку dist из структуры папок.Но это кажется далеко не идеальным.Например, npm install link_to_git_repo не будет работать.

...