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


124

Я використовую модуль 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]

Дякую за допомогу!

Відповіді:


243

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

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

Якщо це потрібна власницька функціональність і не допомогла б розвиткові модуля, найкраще зробити це відщепити його від github та внести зміни. Ви можете встановити елементи безпосередньо з github за допомогою NPM, і цей метод дозволить вам інтегрувати майбутні зміни у вашу власну версію з оригінального джерела.

Щоб встановити безпосередньо з github, використовуйте таку команду:

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


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", щоб просто створити sym-посилання на свою папку: docs.npmjs.com/cli/link
Venryx

3
Зрозумів це, мені довелося перейти в папку /node_modulesі запустити npm installтоді все добре!
Адам Моїса

6

Ви можете використовувати патч-пакет для внесення та збереження змін модулів вузлів.

Це можна зробити, спершу внісши зміни в пакет усередині, node_modulesа потім виконавши наступну команду, <package name>вказуючи ім'я пакету, в який ви щойно внесли зміни.

npx patch-package <package name>

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

Необов’язковий крок:

Додайте наступне в розділ сценарію вашого пакета.json, щоб автоматично виправити залежність при виконанні "npm install".

"postinstall": "npx patch-package" 

1
Дуже приємне рішення, яке працювало для мене без будь-яких питань.
ヨ ハ ン ソ ン

це дійсно круто! FYI: Мені довелося використовувати "попередню інсталяцію" замість "postinstall", тому що мій патч був до сценарію після встановлення залежності. Як би ви це реалізували, якщо у вас були інші патчі, які потрібно було застосувати у фазі після встановлення?
Супероле

1
Неймовірна відповідь, мені потрібно було внести зміни в dep, перш ніж розгорнутись для запуску в мережу. попередньо встановити 'npx патч-пакет' був чарівним квитком. Належне зображення тепер показано на веб-сайті.
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. Тепер ви можете запустити свій проект, щоб побачити, чи працює він.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.