Как установить частный модуль 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, это увеличивает размер вашего репо (при клонировании с полной историей).

Другие вопросы по тегам