Как установить частный модуль NPM без моего собственного реестра?


329

Я взял некоторый общий код и поместил его в модуль NPM, который я не хочу загружать в центральный реестр. Вопрос в том, как мне установить его из других проектов?

Очевидный способ, вероятно, состоит в том, чтобы настроить собственный реестр NPM, но, согласно документации, это связано с большими трудностями.

Могу ли я просто установить модуль NPM, который находится в локальной файловой системе, или, возможно, даже из git?

npm install --from-git git@server:project

Ответы:


263
cd somedir
npm install .

или

npm install path/to/somedir

somedirдолжен содержать package.jsonвнутри него.

Он знает и о git:

npm install git://github.com/visionmedia/express.git

4
Путь / к / somedir решение вроде работает, но потом это ужасно, потому что все операторы require должны включать этот относительный или абсолютный путь. Пожалуйста, поправьте меня, если я делаю что-то не так ...
— Люк Байес

3
@ Лука, да, ты не прав. После того, как npm installвсе файлы скопированы в каталог вашего проекта. Таким образом, пути в requireвыражениях будут относительными только к вашему каталогу проекта.
— Михай

4
Меня смущает верхняя часть, и единственная причина, по которой я сам не проверял это, заключается в том, что я все еще учусь и у меня нет личного модуля для работы. В любом случае, изменив каталог на тот, где находится модуль, а затем вызвав его, installразве это не установится там, а не для проекта, для которого вы хотите его использовать?
— Адам Бек

11
Примечание: (a) при использовании git-репозиториев вы можете указать ветку / commit / tag, добавив #<ref>в конец URL-адреса git, например git://github.com/visionmedia/express.git#v0.0.1; (b) На всякий случай добавьте "private": trueв package.json ваши личные репозитории. Это гарантирует, что npm никогда не позволит вам случайно опубликовать свой секретный соус в официальном реестре npm. (согласно debuggable.com/posts/… )
— Рафаэль Ксавье

9
К вашему сведению, если вы отправляете свой GIT через http, вам нужно, npm i git+http://all/the/things.gitхотя он git clone http://all/the/things.gitработает просто отлично
— slf

527

В ваши частные модули npm добавьте

"private": true 

в ваш package.json

Затем для ссылки на приватный модуль в другом модуле используйте это в вашем package.json

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

59
Это действительно правильный ответ, если вы хотите, чтобы ваш package.json поддерживал список зависимостей частного репозитория, что является хорошей вещью (tm), которую вы должны делать.

6
В примере он ссылается на определенный тег, но если у вас его нет, по умолчанию он будет мастером. (см. git-scm.com/book/en/Git-Basics-Tagging )
— 250R

4
Я не понимаю, как эта командная строка может загружать код из частного репозитория github, если я не предоставляю свои учетные данные! Так как я могу передать свои учетные данные на github?
— Ренато Гама

28
Обратите внимание, что эта "private": trueчасть не обязательна, но она поможет предотвратить случайную публикацию вашего частного репо в публичный реестр npm.
— evanrmurphy

2
npm также ищет несколько переменных окружения. Из руководства в npm install <git remote url>разделе есть варианты, такие как GIT_ASKPASSи. GIT_SSHПример использования для выбора ключа, отличного от id_rsa по умолчанию:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
— Jasmine Hegman

62

Могу ли я просто установить пакет NPM, который находится в локальной файловой системе, или, возможно, даже из git?

Да, ты можешь! Из документов https://docs.npmjs.com/cli/install

Пакет это:

  • а) папка, содержащая программу, описанную файлом package.json
  • б) сжатый архив, содержащий (а)
  • в) URL-адрес, который разрешает (б)
  • г) а <name>@<version> который опубликован в реестре с (с)
  • е) <name>@<tag> указывает на (г)
  • е) <name> который имеет «последний» тег, удовлетворяющий (e)
  • г) а, <git remote url>который разрешает (б)

Разве npm не блестящий?


2
Обратите внимание, что если вы выберете вариант b), то это на самом деле должен быть сжатый архив , zip-архив этого не сделает. Т.е. если вы создаете свой пакет с tar -czf my-package.tar.gz dist(при условии, что в вашей distпапке также есть нужный package.jsonфайл), то вы можете сделать это npm install ../my-lib/my-package.tar.gzиз другого вашего проекта.
— Даниэль Кис-Надь

48

Обновление январь 2016

В дополнение к другим ответам , иногда есть сценарий, когда вы хотите, чтобы частные модули были доступны в командном контексте.

И Github, и Bitbucket поддерживают концепцию генерации ключа API команды . Этот ключ API можно использовать в качестве пароля для выполнения запросов API этой команды.

В ваши частные модули npm добавьте

"private": true 

на ваш package.json

Затем для ссылки на приватный модуль в другом модуле используйте это в вашем package.json

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

где название команды = myteamname , и ключ API = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Здесь я ссылаюсь на репозиторий bitbucket, но он также почти идентичен при использовании github.

Наконец, в качестве альтернативы, если вы действительно не возражаете платить по 7 долларов в месяц (на момент написания), то теперь вы можете иметь частные модули NPM из коробки.


Можете ли вы использовать это, если вы хотите иметь глобальный модуль?
— пи.

Боюсь, это не работает для меня. И удаленный, и хранилище не найдены. Любые идеи?
— Томас Борманс

@ThomasBormans - все еще есть проблемы? Пожалуйста, вставьте (зашифруйте свою команду / ключ API) то, что у вас есть в качестве строки в разделе зависимостей вашего package.json - согласно приведенным выше инструкциям. Я обнаружил, что это хорошо работает как для частных репозиториев github, так и для bitbucket. Что вы используете?
— arcseldon

@arcseldon "name": "git + key: x-oauth-basic@bitbucket.org/user/repo.git " возвращает EISDIR: недопустимая операция с каталогом, прочитайте . И "name": "git + user: key@bitbucket.org/repo.git " возвращает несколько ошибок, в том числе следующие слова remote: Not Found, fatal: repository, Команда завершилась неудачно: git clone . Любые идеи?
— Томас Борманс

Попробуйте придерживаться «точного» формата, который я дал в ответе: «git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git Как вы сгенерировали ключ API? Проверяли ли вы дважды? это правильно в ваших настройках bitbucket ... извините, чтобы спросить очевидное, но я почти на 100% уверен, что это должно сработать
— arcseldon

30

FWIW: У меня были проблемы со всеми этими ответами при работе с хранилищем частной организации.

У меня сработало следующее:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

Например:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

Я не совсем уверен, почему другие ответы не сработали для меня в этом одном случае, потому что это то, что я пытался сначала, прежде чем я попал в Google и нашел этот ответ. И другие ответы - то, что я сделал в прошлом.

Надеюсь, это поможет кому-то еще.


2
Можете ли вы использовать подпапку git-репо?
— Крис

Работал на меня в 2019 году! Но я должен был убедиться, что у git есть учетные данные для доступа к этой учетной записи. (Например, дважды проверьте git clone https://и убедитесь, что пароль не нужен при втором запуске. Тогда все
— готово

9

У меня была такая же проблема, и после некоторого поиска я нашел Реджи ( https://github.com/mbrevoort/node-reggie ). Это выглядит довольно солидно. Это позволяет облегчить публикацию модулей NPM на частных серверах. Не идеально (без аутентификации при установке), и он все еще очень молодой, но я проверил его локально, и, похоже, он делает то, что говорит.

То есть ... (и это только из их документов)

npm install -g reggie
reggie-server -d ~/.reggie

затем перейдите в каталог вашего модуля и ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

наконец, вы можете установить пакеты из reggie, просто используя этот URL либо в прямой команде npm install, либо из пакета package.json ... вот так

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

или..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

7

Структурируйте свой код доступным способом как ниже. Если это возможно для вас.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

В пределах MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Вам может потребоваться обновить package.json как:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Это сработало для моей ситуации.


5

Npm теперь предоставляет неограниченные частные размещенные модули за $ 7 / пользователь / месяц, используемые так

cd private-project
npm login

в вашем комплекте JSON "name": " @username/private-project"

npm publish

тогда потребовать ваш проект:

cd ../new-project
npm install --save @username/private-project

1
Требуется ли для этого этап входа в систему на стороне клиента?
— Эйдан Хулачан

Какая альтернатива этому? Например, если вы хотите разместить свой «пакет» на S3 и вытащить оттуда.
— Кон Антонакос

4

Начиная с ответа arcseldon , я обнаружил, что название команды было необходимо в URL:

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

И обратите внимание, что ключ API доступен только для команды, а не для отдельных пользователей.


2

Настройка для установки из общедоступного репозитория Github, даже если машина находится под брандмауэром:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

2

Я использую следующее с частным репозиторием GitHub:

npm install github:mygithubuser/myproject

2

Это было то, что я искал :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

# … or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev

2

Вы можете использовать ВердаччоДля этой цели который представляет собой легкий частный реестр прокси-серверов npm, встроенный в Node.js. Также это бесплатно и с открытым исходным кодом. Использование Verdaccio не требует столько хлопот, как простой частный реестр npm.

Вы можете найти подробную информацию о том, как установить и запустить его на их сайте, но вот шаги:

Это требует node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Он также имеет докер, так что вы можете легко опубликовать его в общедоступном докере, и, вуаля, у вас есть частный репозиторий npm, который можно распространять другим способом, как вы его настраиваете!


0

Очень просто -

npm config set registry https://path-to-your-registry/

Это на самом деле устанавливает registry = "https://path-to-your-registry"эту строку/Users/<ur-machine-user-name>/.npmrc

Все значения, которые вы установили явно или были установлены по умолчанию, могут быть просмотрены с помощью - npm config list

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.