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. Хотелось бы получить некоторые отзывы по этому вопросу. Похоже, что это может быть достаточно распространенной проблемой, когда необходимо внести изменения в исходный код пакета? Может быть, есть лучшее решение? Заранее благодарим за помощь.
Ответы
Ответ 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
определенно является допустимым вариантом для этого.
Либо выполните одно из следующих действий:
- Обновите файл package.json в своем разветвленном репо, чтобы добавить элемент postinstall в сценарии. Здесь выполните все, что вам нужно, чтобы получить скомпилированный вывод (Preferred).
- Обновите файл 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
. Благодарю.