Як встановити приватний модуль NPM без власного реєстру?


329

Я взяв деякий спільний код і помістив його в модуль NPM, який я не хочу завантажувати в центральний реєстр. Питання в тому, як я можу встановити його з інших проектів?

Очевидний спосіб - це, мабуть, створення мого власного реєстру NPM, але згідно з документацією, це передбачає багато клопоту.

Чи можу я просто встановити модуль NPM, який сидить у локальній файловій системі або, можливо, навіть із git?

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

Відповіді:


262
cd somedir
npm install .

або

npm install path/to/somedir

somedirповинна містити package.jsonвсередині нього.

Він також знає про git:

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

4
Рішення шлях / до / сомедіра працює, але тоді це щось жахливо, оскільки всі заяви, що вимагають, повинні включати цей відносний або абсолютний шлях. Будь ласка, виправте мене, якщо я роблю щось не так ...
Люк Бейс,

3
@Luke так, ти помилився. Після того як npm installусі файли скопійовані у ваш каталог проектів. Тож шляхи у requireвисловлюваннях будуть відносними лише до каталогу ваших проектів.
mihai

4
Мене бентежить верхня частина, і єдина причина, що я цього не перевірив, - це те, що я все ще навчаюся і не маю приватного модуля, над яким можна працювати. У будь-якому випадку, змінивши каталог на те, де знаходиться модуль, а потім зателефонував installби, чи не просто встановити там, а не для проекту, для якого ви хочете його використовувати?
Адам Бек

11
Бічна примітка: (a) під час використання git repos, ви можете вказати гілку / комісію / тег, додавши #<ref>до кінця URL-адреси git, наприклад git://github.com/visionmedia/express.git#v0.0.1; (b) Для безпечного додавання "private": trueдо package.json ваших приватних репостів. Це дозволить гарантувати, що npm ніколи не дозволить вам випадково опублікувати свій секретний соус до офіційного реєстру npm. (відповідно до debuggable.com/posts/… )
Рафаель Ксав'є

9
FYI, якщо ви обслуговуєте свій git вгору через http, вам потрібно буде, npm i git+http://all/the/things.gitнавіть якщо це git clone http://all/the/things.gitпрацює чудово
slf

527

У ваші приватні модулі npm додайте

"private": true 

до вашого пакету.json

Потім для посилання на приватний модуль в іншому модулі використовуйте це у своєму пакеті.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
Жасмін Хегман,

62

Чи можу я просто встановити пакет NPM, який сидить у локальній файловій системі або, можливо, навіть із git?

Так, ти можеш! З документів https://docs.npmjs.com/cli/install

Пакет:

  • а) папку, що містить програму, описану файлом package.json
  • b) gzipped тарбол, що містить (a)
  • в) URL-адреса, яка має значення (b)
  • г) а <name>@<version> який публікується в реєстрі з (с)
  • д) а <name>@<tag> що вказує на (d)
  • f) а <name> який має "останній" тег, що задовольняє (e)
  • g) a, <git remote url>що відповідає (b)

Чи не пнм блискучий?


2
Зауважте, що якщо ви перейдете на варіант b), це насправді має бути gzipped tarball , простий архів 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 

до вашого пакету.json

Потім для посилання на приватний модуль в іншому модулі використовуйте це у своєму пакеті.json

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

де назва команди = myteamname та API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Тут я посилаюся на репортаж про бітбукет, але він майже однаковий і за допомогою github.

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


Чи можете ви використовувати це, якщо хочете мати глобальний модуль?
ПІ.

Це не працює для мене, я боюся. І віддалений, і сховище не знайдені. Будь-які ідеї?
Томас Борманс

@ThomasBormans - все ще виникають проблеми? Будь ласка, вставте (зашифруйте своє ім’я команди / api) те, що у вас є як ваш рядок, у розділі залежності вашого пакета.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 " повертає кілька помилок, включаючи ці слова віддалені: Не знайдено, фатально: сховище, Команда не вдалася: 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 repo?
Кріс

Працював для мене у 2019 році! Але мені довелося переконатися, що git має облікові дані для доступу до цього облікового запису. (Напр. Тестуйте git клонуйте двічі https://, і переконайтеся, що пароль не потрібен під час другого запуску. Тоді вам добре піти!)
joeytwiddle

9

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

Тобто ... (і це лише з їхніх документів)

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

потім CD в каталог вашого модуля і ...

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

нарешті, ви можете встановити пакунки з reggie, просто скориставшись цією URL-адресою або в прямій команді установки npm, або з пакета 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 \ Модулі \ 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 і потягніть звідти.
Con Antonakos

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

Можна використовувати Verdaccio для цієї мети, що є легким приватним реєстром проксі 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.