Я предполагаю, что у вас есть внешний интерфейс и lib, проверенные локально в двух разных папках и связанные lib с внешним интерфейсом, используя что-то вроде cd frontend && npm link lib
Таким образом, ваша цель состоит в том, чтобы работать (изменить код в двух редакторах) одновременно на обоих пакетах, но также хотеть иметь возможность запускать компилятор и модульные тесты в frontend и lib по отдельности.
Ответ таков:Вы не можете (это легко).Это связано с тем, что зависимости разрешаются всегда в первую очередь в папке пакета.Это означает, что если у вас установлен foo в lib, он всегда будет выбирать lib: foo, а не root: foo.
Самое простое решение для этого - вообще не устанавливать lib: foo или просто удалять его.Он использует затем root: foo, как вы хотите.Однако, если вы используете npm link
, он сначала устанавливает все зависимости lib.
Таким образом, для одноразовой сборки во внешнем интерфейсе вы можете просто удалить этот пакет lib: foo и затем выполнить сборку.Тем не менее, с точки зрения пакета lib, ничего не будет работать, поскольку его зависимости были испорчены.
Более надежное решение - установить lib в корневой каталог, который устанавливает только фактические зависимости foo, которые нев peer / devDependencies
Чтобы сделать это, вы можете использовать npm-local-development в https://github.com/marcj/npm-local-development
В основном это делает то же самое, что и npm link
, но обходит ограничение devDependency путемнастройка наблюдателя файлов и синхронизация изменений файла в фоновом режиме, за исключением всех devDependencies / peerDependencies.
- Вы устанавливаете npm-local-development: npm i -g npm-local-development
- Вы создаете файл с именем
.links.json
в своем корневом пакете. Вы записываете в него каждое имя пакета с его относительным локальным путем к папке, например
{"@ shared / core":" ../../my-library-repo/packages/core "}
- Откройте консоль и запустите
npm-local-development
в этом корневом пакете.Пусть он работает в фоновом режиме.
Отказ от ответственности: я являюсь автором этого бесплатного проекта с открытым исходным кодом.