Как установить частный модуль NPM без моего собственного реестра?
Я взял некоторый общий код и поместил его в модуль NPM, который я не хочу загружать в центральный реестр. Вопрос в том, как мне установить его из других проектов?
Очевидный способ, вероятно, состоит в том, чтобы настроить мой собственный реестр NPM, но, согласно документации, это связано с большими трудностями.
Могу ли я просто установить модуль NPM, который находится в локальной файловой системе, или, возможно, даже из git?
npm install --from-git git@server:project
16 ответов
cd somedir
npm install .
или же
npm install path/to/somedir
somedir
должен содержать package.json
внутри него.
Он знает и о git:
npm install git://github.com/visionmedia/express.git
В ваши частные модули npm добавьте
"private": true
в ваш package.json
Затем, чтобы сослаться на приватный модуль в другом модуле, используйте это в вашем package.json
{
"name": "myapp",
"dependencies": {
"private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
}
}
Могу ли я просто установить пакет NPM, который находится в локальной файловой системе, или, возможно, даже из git?
Да, ты можешь! Из документов https://docs.npmjs.com/cli/install
Пакет это:
- а) папка, содержащая программу, описанную файлом package.json
- б) сжатый архив, содержащий (а)
- в) URL-адрес, который разрешает (б)
- г) а
<name>@<version>
который опубликован в реестре с (с)- е)
<name>@<tag>
что указывает на (d)- е)
<name>
который имеет "последний" тег удовлетворяющий (е)- г) а
<git remote url>
который разрешает (б)
Разве npm не блестящий?
Обновление январь 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 из коробки.
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 и нашел этот ответ. И другие ответы - то, что я сделал в прошлом.
Надеюсь, это поможет кому-то еще.
Структурируйте свой код доступным способом как ниже. Если это возможно для вас.
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"
}
Это сработало для моей ситуации.
У меня была такая же проблема, и после некоторого поиска я нашел Реджи ( 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"
}
Это было то, что я искал:
# 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
Npm теперь предоставляет неограниченные частные размещенные модули за $7/ пользователь / месяц, используемые так
cd private-project
npm login
в вашем комплекте JSON "name": " @username/private-project"
npm publish
Затем потребовать ваш проект:
cd ../new-project
npm install --save @username/private-project
Я использую следующее с частным репозиторием GitHub:
npm install github:mygithubuser/myproject
Начиная с ответа arcseldon, я обнаружил, что название команды было необходимо в URL:
npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"
И обратите внимание, что ключ API доступен только для команды, а не для отдельных пользователей.
Очень просто -
npm config set registry https://path-to-your-registry/
Это на самом деле устанавливает registry = "https://path-to-your-registry"
эта линия /Users/<ur-machine-user-name>/.npmrc
Все значения, которые вы установили явно или были установлены по умолчанию, могут быть просмотрены с помощью - npm config list
Для этой цели вы можете использовать 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, который можно распространять среди других таким образом, как вы его настраиваете!
Настройка для установки из общедоступного репозитория Github, даже если машина находится под брандмауэром:
dependencies: {
"foo": "https://github.com/package/foo/tarball/master"
}
- Опубликуйте свой модуль под именем организации, используя стандартный «@my-org/my-module» (по умолчанию все модули организации являются частными).
- В своем профиле npm создайте токен доступа только для чтения в разделе «Токены доступа».
- Затем в корне каталога вашего проекта создайте
.npmrc
файл, а внутри файла напишите следующее:
//registry.npmjs.org/:_authToken=${Your_Access_Token}
Примечание: это также должно работать для других служб упаковки, которые следуют тому же стандарту.
Очевидно, что настройка частного реестра npm является наиболее масштабируемым и долгосрочным решением, хотя поначалу это может вызвать некоторые затруднения.
Кроме того, вы можете установить с помощьюgit+https/ssh
как упоминалось в других ответах. Но если у вас есть частное репо и вы создаете образ в облаке, скажем, с помощью облачной сборки Google, вам необходимо настроить ssh-соединение GitHub.
Простейшее решение для такого разового случая можно решить, используя следующий подход.
Клонируйте и изменяйте или создавайте собственную библиотеку с нуля.
Создайте файл архива (код пакета вместе с его зависимостями), используя
yarn install && yarn pack
это создаст файл типа
rich-markdown-editor-v11.13.117.tgz
переместить этот файл в
libs
папку и добавьте эту запись в объект зависимостейpackage.json
."rich-markdown-editor": "file:libs/rich-markdown-editor-v11.13.117.tgz",
Теперь установите пакет.
yarn install
Обязательно добавьте этот файл в свой vcs, и процесс установки при создании образа докера также должен работать в облаке.
Примечание. Если вы часто обновляете пакет и фиксируете его в vcs, это увеличивает размер вашего репо (при клонировании с полной историей).