Установка/зависимость NPM из двоичной версии GitHub Release

Я знаю, как сделать зависимость NPM от версии GitHub:

"dependencies": {
  "package-name": "user/repo#v1.0.0"
}

Это хорошо, но я хочу установить конкретный двоичный из этой версии.

Я пробовал

"dependencies": {
  "package-name": "https://github.com/user/repo/releases/download/v1.0.0/bin.tgz"
}

Но я даю следующую ошибку:

❯ npm install
npm ERR! fetch failed https://github.com/user/repo/releases/download/v1.0.0/bin.tgz
npm WARN retry will retry, error on last attempt: Error: fetch failed with status code 404

Активы двоичной версии существуют за пределами GitHub и используют AWS S3.

URL github.com/user/repo/releases/download/v1.0.0/bin.tgz перенаправляется с состоянием 302 и заголовком местоположения HTTP, установленным на https://github-cloud.s3.amazonaws.com/releases/XXX/XXX...

Если я попробую напрямую с URL-адресом S3, я получил ошибку ENAMETOOLONG (см. вопрос NPM):

> npm install https://github-cloud.s3.amazonaws.com/releases/XXX/XXX...
npm ERR! tarball.destroy is not a function
npm WARN retry will retry, error on last attempt: Error: ENAMETOOLONG: name too long, open '/var/folders/pn/......

Вопросы:

  • Почему NPM не выполняет перенаправление?
  • Почему a 404?
  • Есть ли способ связать зависимость NPM с бинарным tarball выпуска GitHub? Как?

Мой контекст и потребности:

  • У меня есть приватный репозиторий GitHub
  • Мой пакет должен быть создан до "развертывания" (transpilation и т.д.)
  • Я хочу "опубликовать" tarball этой сборки в своем выпуске GitHub и напрямую ссылаться на мои зависимости NPM.
  • Я использую службу CI для сборки, создаю архив и загружаю его рядом с выпуском GitHub.
  • Я хотел бы использовать двоичный релиз GitHub как репозиторий NPM

Связанные

Ответ 1

Выпуски Github основаны на тэгах Git.

"... Версии основаны на Gitтеги".

https://help.github.com/articles/creating-releases/

Чтобы указать версию с URL-адресом Git, включите соответствующий, например тег, конец в виде фрагмента URL-адреса. Например, для тега с именем 0.3.1:

"dependencies": {
  "myprivatemodule": "[email protected]:...#0.3.1"
}

Отрезанная часть (...) должна быть заполнена:

"myprivatemodule": "[email protected]:{owner}/{project}.git#0.3.1"

И другой формат адреса будет необходим, если доступ к SSH недоступен:

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

любезно взято из: npm установить из Git в определенную версию

Ответ 2

404 - это то, что вы являетесь частным репо и не включаете аутентификацию в URL-адрес.

Публичное репо:

"agentframework": "https://github.com/agentframework/agentframework/releases/download/beta/agentframework-beta.tar.gz"

Частное репо:

package.json

{
  "name": "test",
  "version": "1.0.0",
  "dependencies": {
    "agentframework": "https://github.com/agentframework/agentframework/releases/download/beta/agentframework-beta.tar.gz"
  }
}

BTW: вы можете использовать yarn install, который я использовал в своих проектах