У меня есть проект на основе 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
не будет работать.