Подтвердить что ты не робот

Npm установить и построить разветвленную github repo

Это не совсем новый вопрос, но сейчас я хорошо смотрю, и у меня проблемы с поиском решения.

Я использую модуль для моего приложения angular, называемого angular -translate. Тем не менее, мне пришлось внести несколько небольших изменений в исходный код, чтобы все работало так, как хотелось бы, и теперь я хочу сохранить эти изменения на npm install. Коллега предположил, что я форкирует репо исходного кода и указываю на свое раздвоенное репо в качестве зависимости, которое я пытался этим способом, например.

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz

Первый дает мне такую ​​директорию без сборки. Просто package.json,.npmignore и некоторые файлы разметки

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

Второй npm install дает мне полное репо, но опять же я не получаю сборку, например, когда я использую команду npm install angular-translate. Я видел некоторые проблемы с запуском prepublish script, но я не уверен, как это сделать при установке всех модулей. Я также попытался опубликовать fork как свой собственный модуль в реестре npm, но опять же я не получаю сборку, и я не уверен, что это правильно...

Я извиняюсь за свое невежество по этой теме. У меня нет большого опыта работы с npm. Хотелось бы получить некоторые отзывы по этому вопросу. Похоже, что это может быть достаточно распространенной проблемой, когда необходимо внести изменения в исходный код пакета? Может быть, есть лучшее решение? Заранее благодарим за помощь.

4b9b3361

Ответ 1

Попробуйте npm install <ghusername>/<repoName>, где <ghUsername> - ваше имя пользователя GitHub (без @) и <repoName> - это имя репозитория. Это должно правильно установить его. Скорее всего, вы захотите использовать флаг --save или --save-dev с командой установки для сохранения зависимостей в package.json.

Если это не работает, проверьте содержимое вашего файла .npmignore.

Не паникуйте, если команда установки занимает много времени; установка из репозитория git выполняется медленнее, чем установка из реестра npm.


Edit:

Ваша проблема в том, что в вашем случае dist/ не привязан к репо (поскольку он находится в .gitignore). Именно там живет реальный код. dist/ создается из файлов в src/, прежде чем пакет будет опубликован в реестре npm, но dist/ никогда не будет привязан к репо.

Это уродливо, но в этом случае вам придется удалить dist/ из .gitignore, а затем запустить:

npm run build
git add .
git commit
git push

(убедитесь, что вы сначала запустили npm install)

Затем вы сможете установить из github.

Возможно, существует другой способ сделать это, используя postinstall script, но я не уверен, что это возможно; Я никогда не пробовал.

Ответ 2

Обновление для тех, кто использует npm 5:

As of [email protected], prepublish scripts are deprecated.

Используйте prepare для шагов сборки и prepublishOnly только для загрузки.

Я обнаружил, что добавление "prepare": "npm run build" в скрипты исправило все мои проблемы.

Ответ 3

В дополнение к отличному ответу @RyanZim, postinstall определенно является допустимым вариантом для этого.

Либо выполните одно из следующих действий:

  1. Обновите файл package.json в своем разветвленном репо, чтобы добавить элемент postinstall в сценарии. Здесь выполните все, что вам нужно, чтобы получить скомпилированный вывод (Preferred).
  2. Обновите файл package.json и добавьте postinstall, который обновит необходимый каталог в node_modules.

Если вы разветкили репозиторий других лиц, то, возможно, стоит поднять проблему, чтобы проиллюстрировать проблему, заключающуюся в том, что установка их пакета через GitHub не работает, поскольку она не обеспечивает необходимые средства для создания сценария. Оттуда они могут либо принять PR, чтобы решить эту проблему с помощью postinstall, либо они могут отклонить его, и вы можете сделать # 2.

Ответ 4

prepare - правильный путь

Если у вас есть хранилище с исходными файлами, но для его использования необходим шаг "сборки", добавление сценария prepare к этому "пакету" делает именно то, что вам нужно во всех случаях (начиная с npm 4).

prepare: запускать оба ПО ДО того, как пакет будет упакован и опубликован, на локальном npm install без каких-либо аргументов и при установке git-зависимостей.

Вы даже можете поместить свои зависимости сборки в devDependencies, и они будут установлены до выполнения prepare.

Вот пример моего пакета, который использует этот метод.


Проблемы с .gitignore

Есть одна проблема с этой опцией, которая получает много людей. При подготовке зависимости Npm и Yarn будут только хранить файлы, перечисленные в разделе files package.json.

Кто-то может увидеть, что files по умолчанию включает все файлы, включенные, и подумать, что все готово. Что легко пропустить, так это то, что .npmignore в основном переопределяет директивы files и, если .npmignore не существует, вместо него используется .gitignore.

Итак, если ваши встроенные файлы перечислены в .gitignore как здравомыслящий человек, не перечисляйте ваши встроенные файлы в files и не используйте файл .npmignore, prepare будет выглядеть испорченным.

Если вы исправите files, чтобы он включал только встроенные файлы, или добавили пустой .npmignore, все готово.


Оригинальный ответ: fooobar.com/questions/387594/...

Ответ 5

Просто используйте команду npm install git+https://[email protected]/myRepo/angular-translate.git. Благодарю.