Исправление пакета NPM локально с помощью пакета исправлений, не работает
Я работаю над интерфейсом vue.js, и мне нужно исправить пакет, чтобы он соответствовал особым потребностям приложения. Пакет, который я пытаюсь исправить, это 'vue-youtube
'(не то чтобы это действительно важно). Пытаюсь пропатчить патч-пакетом (https://www.npmjs.com/package/patch-package)
Итак, в основном:
- Я редактировал локально
/node_modules/vue-youtube/src/vue-youtube.js
чтобы соответствовать моим потребностям - Я добавил сценарий postinstall в свой package.json:
"scripts": { "postinstall": "patch-package" }
- я сделал
npm install patch-package --save-dev
- Затем я побежал
npx patch-package vue-youtube
- Это действительно создало
vue-youtube+1.4.0.patch
файл в/patches
папка с моими модификациями
НО, моих модификаций не видно. Когда я делаю
npm run serve
и запустите мое веб-приложение, используемый пакет все еще не редактировался. Я пробовал бежать
npm install
раньше, но безуспешно. Когда я иду в
/node_modules/vue-youtube/dist/vue-youtube.js
(к счастью, это небольшой пакет, поэтому он удобочитаем), я вижу, что действительно мои модификации не были "скомпилированы".
Что мне здесь не хватает? Я чувствую, что следил за всем на странице npm пакетов патчей..
благодаря
РЕДАКТИРОВАТЬ: Все еще изучаю... еще несколько информации / вопросов:
- мое имя патча
patches/vue-youtube+1.4.0.patch
- когда я бегу
npm ls vue-youtube
он возвращает только один элемент:vue-youtube@1.4.0
- в моем
package.json
указанная зависимость"vue-youtube": "^1.4.0"
, должно быть иначе? следует ли упоминать, что его нужно исправить?
РЕДАКТИРОВАТЬ 2: после просмотра видео, на котором парень успешно исправляет пакет, я понимаю, что не редактирую
node_modules/vue-youtube/dist/vue-youtube.js
, но
node_modules/vue-youtube/src/vue-youtube
. Я как-то думал, что при патче исходники собираются перекомпилировать webpack в папку dist. Здесь я ошибаюсь? Нужно ли мне напрямую редактировать /dist/ files?
5 ответов
РАБОЧЕЕ РЕШЕНИЕ: Если вы редактируете файлы прямо в
dist/
папку пакета вместо
src/
папка, патч работает нормально.
У меня сработало добавление ниже npm-скрипта в package.json после исправления.
scripts: {
"prepare": "patch-package",
}
Строки из документации по пряже объясняют подготовку
For compatibility reasons, scripts called install, postinstall, prepublish, and prepare will all be called after your package has finished installing.
После добавления этого скрипта в package.json изменения файла модуля в папке patches были внесены в соответствующий модуль узла.
Для тех, кто используетNextJS
, удалить папкуcaches
в.next
папка
Я пытался сделать то же самое с некоторым пакетом, назовем его "some_package". Когда я увидел EDIT 2 , мой разум просто соединил точки...
Локальное тестирование изменений
Измените файлы в
node_modules/some_package/src
папку, а затем перейдите в
node_modules/some_package
и запустите:
$ npm install
$ npm run <name of the script that generates the dist folder>
Не нужно бежать
npx patch-package
ни
postinstall
шаг.
Я думаю, что этот подход не работает для всех пакетов, это зависит от того, как модифицированный пакет
package.json
настроен. В частности, обратите внимание, где
browser
поле указывает (в моем случае
./dist/some_package.js
).
ПРЕДОСТЕРЕЖЕНИЕ: вам придется бежать
npm install
а также
npm run
каждый раз, когда вы делаете обновление пакета.
Тестировать изменения и иметь возможность делиться ими с членами команды (когда пакет находится на Github).
- Создайте форк пакета, который вы хотите изменить.
- Внесите все необходимые изменения в разветвленную версию пакета.
- Запустите следующее, чтобы автоматически обновить файл package.json, чтобы сделать точку зависимости вашей разветвленной версии:
$ npm install <github's user name>/<package's name of the forked repository>#<branch name> --save-prod
Например, если ваше имя пользователя Github — «johndoe», вы разветвили https://github.com/aurelia/framework и создали ветку с именем «mycoolbranch», содержащую ваши изменения, тогда это будет:
$ npm install johndoe/aurelia-framework#mycoolbranch --save-prod
Обратите внимание, что
--save-prod
флаг можно заменить на
--save-dev
если зависимость только для разработки.
Взгляните на этот ответ, это может помочь. /questions/59561952/poluchenie-oshibok-pri-ispravlenii-paketa-npm/61113691#61113691
Для меня это происходило из-за несоответствия версии между предполагаемой версией пакета package.json и yarn.lock/package-lock.json.