Як встановити приватний модуль 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.