Как упаковать снимок локальной зависимости в опубликованный пакет

В монорепозитории JavaScript, управляемом с помощью Rush, у меня есть три проекта:

  • backend/
  • frontend/
  • shared/

В backend/package.json а также frontend/package.json, то shared проект объявлен как зависимость:

  "dependencies": {
    "shared": "0.0.0",

В локальной среде все работает нормально, благодаря Rush, который запускается npm link для меня.

Теперь мне нужно опубликовать.

На frontend проект, команда rushx build (нравиться npm run build) создает пакеты JS и CSS с помощью webpack и помещает их в backend/ каталог.

Я хотел бы опубликовать backendпроект как реальный пакет на npmjs. Я не хочу публиковатьsharedкак отдельный пакет, потому что в опубликованной версии он больше не используется. Вsharedконтент уже включен во внешний интерфейс. Я бы тоже хотел встроить его в бэкэнд.

Пытался упаковать:

cd backend/
npm pack ../shared
# A new file is created: 'shared-0.0.0.tgz'

Затем я отредактировал backend/package.json:

  "dependencies": {
    "shared": "shared-0.0.0.tgz",

Но после этого сгенерированный пакет не работает. Когда я выполняюnpm install my-published-package, он пытается найти shared-0.0.0.tgz в текущем каталоге вместо каталога установленного пакета.

Есть элегантное решение?

1 ответ

Попробуйте указать полный относительный путь к shared-0.0.0.tgz, как указано здесь:

  "dependencies": {
    "shared": : "file:~/some/relative/path/shared-0.0.0.tgz"

Допустимые относительные пути могут быть такими, как эти (используйте все, что подходит для вашей структуры):

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

Тогда сделай rush install или rush update для обработки изменения.

Если это не сработает, попробуйте сохранить общий пакет с помощью npm install --save первый.

Если это не сработает, ответом может быть bundledDependencies. Сегодня я создам тестовый проект, чтобы опробовать его и обновить позже, но это может помочь вам раньше.

Другие вопросы по тегам