Как упаковать только папку dist в монорепо

Я использую рабочие области lerna и yarn в моем монорепозитории. Структура пакета выглядит так:

root
`--- packages
     |--- pkg1
     |    |--- src
     |    |    `--- index.ts
     |    `--- dist
     |         `--- index.js
     `--- pkg2
          |--- src
          |    `--- index.ts
          `--- dist
               `--- index.js
  • src папка компилируется в dist папку.
  • Из каждого пакета я хотел бы опубликовать только папку dist, чтобы импорт работал без необходимости записи main в package.json, указывающей на папку dist. Это легко сделать с помощью lerna: lerna publish --contents dist.

Это отлично работает для внешних проектов, которым необходимо использовать это репо, однако это не работает в самом репо. Например, если pkg2, зависит от pkg1, он ищет файл index.js pkg1 по адресу pkg1/index.js, в то время как на самом деле скомпилированная версия находится под pkg1/dist/index.js. Как я могу заставить это работать?

P.S. Я видел эту работу в таких репозиториях, как material-ui, но я не могу объяснить как там работает!


person Naresh    schedule 07.05.2020    source источник
comment
Вы нашли решение? Также проверьте stackoverflow.com/questions/61568475/   -  person Fernando Montoya    schedule 26.05.2020
comment
Нет, пока не нашел хорошего решения. Также посмотрел на вопрос SO, на который вы указали.   -  person Naresh    schedule 26.05.2020
comment
Я потратил большую часть дня на перенос его на nx.dev, он работает очень хорошо, но я просто обнаружил ошибку сборки .   -  person Fernando Montoya    schedule 26.05.2020
comment
Это не то решение, которое я хотел, но я установил outDir на './' в tsconfig.json. Таким образом, все перенесенные файлы сбрасываются в корневую папку, и я могу ссылаться на них без /dist/....   -  person gabriel_vincent    schedule 12.06.2021


Ответы (1)


Посмотрите на поле «files» файла package.json https://docs.npmjs.com/files/package.json#files

Поле «files» - это массив файлов, которые нужно включить в ваш проект. Если вы дадите имя папке в массиве, она также будет включать файлы внутри этой папки. (Если только они не будут проигнорированы другим правилом.)

person Zach Itzcovitch    schedule 16.06.2020