Исправление пакета 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).

  1. Создайте форк пакета, который вы хотите изменить.
  2. Внесите все необходимые изменения в разветвленную версию пакета.
  3. Запустите следующее, чтобы автоматически обновить файл 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.

Другие вопросы по тегам