Как упаковать снимок локальной зависимости в опубликованный пакет
В монорепозитории 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. Сегодня я создам тестовый проект, чтобы опробовать его и обновить позже, но это может помочь вам раньше.