Как заставить npm отдавать предпочтение локальной связанной зависимости по сравнению с опубликованной установкой - PullRequest
0 голосов
/ 20 сентября 2018

Я искал другие вопросы, такие как , этот , но все они, похоже, о локальном npm link прекращении работы по другой причине, чем у меня.Я предполагаю, что это распространенная проблема варианта использования, поэтому, если я делаю что-то методически неправильно, я более чем рад принять предложения о том, как я должен сделать это.

В принципе, у меня есть частный модуль npm, над которым я работаю, который называется @organisation/module.Работая локально, я запускаю npm link и использую его в своем проекте 'host' как npm link @organisation/module - все это прекрасно работает с горячей перезагрузкой и т. Д. Я также импортирую его как import module from '@organisation/module.

Однако, поскольку я также хочу время от времени публиковать свои локальные изменения в npm (как @organisation/module), для тестирования сборки и производственного кода мне нужно запустить npm install @organisation/module на хост-проекте.

Похоже, что это нарушает неявное npm link Я установил ранее ... Я полагаю, в основном потому, что они имеют одно и то же имя, а npm предпочитает install вместо link?

Когда я снова хочу сделать локальные изменения живыми, единственный способ, которым я могу в настоящее время заставить его работать, - через npm uninstall @organisation/module и затем заново связать его.

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

Диаграмма для ref: Diagram for ref

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вы пробовали локальную установку с помощью другого метода, предоставляемого npm.

npm install /absolute/path/packageName

Я полагаю, это изменит вашу запись в package.json, чтобы она выглядела так:

"dependencies" {
    ...
    "packageName": "file:../../path/to/packageName",
    ...
}
0 голосов
/ 09 октября 2018
  1. Перейдите в каталог, в котором находится локальный пакет, откройте package.json измените имя с original_name на "original_name_local".

  2. write npm link onтерминал в том же месте.

  3. После этого перейдите в свой рабочий каталог и напишите npm install <path to local>

  4. Теперь, где бы вы ни находились requiringили importing измените имя на «original_name_local»

, например, если это require('space-cleaner'), затем измените его на require('space-cleaner_local')

Таким образом, вы можете иметь как локальныйа также производственный пакет, просто измените имя везде, где необходимо.

В противном случае вы можете удалить пакет, удалив его из package.json и удалив из node_modules.

, если требуется local, перейдите в локальный каталог пакетаи на терминале напишите npm link, а затем в своем рабочем каталоге напишите npm install ./path/to/package

, если производство, затем снова удалите пакет, как сказано выше, и напишите npm install package_name

0 голосов
/ 03 октября 2018

Поскольку npm link создает символическую ссылку в глобальной папке, тогда как npm install является локальной для проекта, установка npm имеет приоритет.Вы можете прочитать о ссылке npm здесь: https://docs.npmjs.com/cli/link

Чтобы избежать этого, я бы предложил использовать npm install <path to local>, а когда вам нужно использовать рабочий код, используйте npm install @organization/module.Это обновит ваши node_modules для каждого кода.Прочтите об установке npm здесь: https://docs.npmjs.com/cli/install

Надеюсь, это поможет:)

...