Как отредактировать модуль узла, установленный через npm?

125

Я использую модуль node_swiz, который, в свою очередь, использует модуль валидатора.

Я хочу внести изменения в модуль валидатора, но я использовал npm install для установки модулей / зависимостей.

Могу ли я просто внести изменения в модуль валидатора внутри node_modules, или эти зависимости node_modules будут воссозданы, и последняя версия будет получена при публикации в heroku или при следующем запуске npm install?

Структура выглядит так:

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

Спасибо за помощь!

user1810875
источник

Ответы:

244

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

Если изменения влияют на функциональность всего модуля и могут быть полезны другим, вы можете внести свой вклад в исходный код на github и поищите изменения, которые будут реализованы.

Если это проприетарная функциональность, которая необходима и не поможет в разработке модуля, лучше всего выполнить его вилку из github и внести свои изменения. Вы можете устанавливать элементы непосредственно из github с помощью NPM, и этот метод позволит вам интегрировать будущие изменения в вашу собственную версию из исходного источника.

Чтобы установить прямо из github, используйте следующую команду:

npm install https://github.com/<username>/<repository>/tarball/master

Sdedelbrock
источник
2
Спасибо! Это именно то, что я хотел знать. Кроме того, для других, читающих это ... Я хотел включить модуль, который находится в моем github, в файл package.json, и здесь есть информация об этом: stackoverflow.com/a/8306715/1810875
user1810875
22
перед разветвлением я меняю его в локальной системе, но это, похоже, не влияет. Изменение любого файла javascript, который является node_modules / package_name / lib / file_name.js, влияет?
любознательный
1
Просто примечание, не уверен, что что-то изменилось, но лично мне пришлось указать URL-адрес Git как git: //github.com/ <user> / <package> .git "
Крейг
5
@JohnDevor Вместо того, чтобы устанавливать настроенный модуль, используйте команду «npm link», чтобы просто создать символическую ссылку на его папку: docs.npmjs.com/cli/link
Venryx
3
Разобрался, мне пришлось перейти в папку /node_modulesи запустить, npm installтогда все хорошо!
Адам Мойса
9

Вы можете использовать пакет исправлений для внесения и сохранения изменений в модулях узлов.

Это можно сделать, сначала внося изменения в пакет внутри, node_modulesа затем выполнив следующую команду с <package name>именем пакета, в который вы только что внесли изменения.

npx patch-package <package name>

patch-package затем создаст patchesпапку с файлом внутри, представляющим ваши изменения. Затем этот файл можно передать в git, а исправления можно будет восстановить позже, запустив npx patch-package(без каких-либо аргументов).

Необязательный шаг:

Добавьте следующее в раздел сценария вашего package.json, чтобы автоматически исправить зависимость при выполнении «npm install».

"postinstall": "npx patch-package" 
Педро Фракасси
источник
1
Очень хорошее решение, которое сработало для меня без проблем.
ヨ ハ ン ソ ン
это действительно круто! К вашему сведению: мне пришлось использовать «preinstall» вместо «postinstall», потому что мой патч относился к сценарию postinstall зависимости. Как бы вы это реализовали, если бы у вас были другие исправления, которые нужно было применить на этапе после установки?
Superole
1
Невероятный ответ, мне нужно было внести изменения в dep перед развертыванием в netlify. preinstall 'npx patch-package' был волшебным билетом. Правильное изображение теперь отображается на веб-сайте.
TheBetterJORT,
1

Я не хотел публиковать новый модуль и не хотел npm installперезаписывать свои изменения. Я нашел решение обеих этих проблем, но, вероятно, было бы лучше последовать совету @ Sdedelbrock. Но если вы хотите это сделать, вот как:

  1. Отредактируйте package.jsonфайл, чтобы удалить зависимость, которую вы хотите изменить.
  2. Зайдите в свой проект /node_modulesи переместите папку в другое место в репозитории, которое можно зафиксировать. Так что сейчас /node_modules/dependencyна/dependency
  3. cd в каталог зависимостей и введите npm link
  4. cdв корень каталога вашего проекта и введите. npm link dependency Важно, чтобы вы делали это вне /node_modulesи/dependency

Если все сработало, теперь у вас должна быть символическая ссылка, созданная в /node_modules/dependency. Теперь вы можете запустить свой проект и посмотреть, работает ли он.

Даниэль Каплан
источник