Вопрос по npm-private-modules, package, npm, node.js – Как установить частный модуль NPM без моего собственного реестра?

294

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

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

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

<code>npm install --from-git [email protected]:project
</code>

Ваш Ответ

13   ответов
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

6

для вас.

NodeProjs\Apps\MainApp\package.json

NodeProjs\Modules\DataModule\package.json

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

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

You may need to update package.json as:

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

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

238
cd somedir
npm install .

или же

npm install path/to/somedir

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

Он знает и о git:

npm install git://github.com/visionmedia/express.git
Решение типа путь / к / кому-то работает, но тогда оно ужасно, потому что все операторы require должны включать этот относительный или абсолютный путь. Пожалуйста, исправьте меня, если я делаю что-то не так ...
К вашему сведению, если вы отправляете свой GIT через http, вам нужноnpm i git+http://all/the/things.git даже еслиgit clone http://all/the/things.git работает просто отлично
@ Да, ты ошибаешься. Послеnpm install Все файлы копируются в каталог вашего проекта. Так что пути вrequire заявления будут относиться только к вашему каталогу проекта.
Я смущен верхней частью, и единственная причина, по которой я сам не проверял это, состоит в том, что я все еще учусь и у меня нет личного модуля для работы. В любом случае, изменив каталог на тот, где находится модуль, а затем вызываяinstall Разве это не просто установить там, а не для проекта, для которого вы хотите его использовать?
Примечание: (a) при использовании git-репозиториев вы можете указать ветку / commit / tag, добавив#<ref> до конца git url, напримерgit://github.com/visionmedia/express.git#v0.0.1; (б) для безопасности добавить"private": true в package.json ваших личных репозиториев. Это гарантирует, что npm никогда не позволит вам случайно опубликовать свой секретный соус в официальном реестре npm. (в соответствии сdebuggable.com/posts/…)
3

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

cd private-project
npm login

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

npm publish

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

cd ../new-project
npm install --save @username/private-project
Требуется ли для этого этап входа в систему на стороне клиента?
Какая альтернатива этому? Например, если вы хотите разместить свой & quot; пакет & quot; на S3 и тяни оттуда.
59

or perhaps even from git?

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

A package is:

a) a folder containing a program described by a package.json file b) a gzipped tarball containing (a) c) a url that resolves to (b) d) a <name>@<version> that is published on the registry with (c) e) a <name>@<tag> that points to (d) f) a <name> that has a "latest" tag satisfying (e) g) a <git remote url> that resolves to (b)

Разве это не просто великолепно?

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

ответ АрксельдонаЯ обнаружил, что название команды было необходимо в URL-адресе, например, так:

npm install --save "git+https://[email protected]@bitbucket.org/myteamname/myprivate.git"

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

42

Update January 2016

In addition to other answersИногда возникает сценарий, когда вы хотите, чтобы приватные модули были доступны в командном контексте.

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

В вашемprivate npm modules добавлять

"private": true 

на вашpackage.json

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

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
        }
    }

гдеteam name = myteamname, а такжеAPI Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

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

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

Боюсь, это не работает для меня. И удаленный, и хранилище не найдены. Есть идеи?
Можете ли вы использовать это, если вы хотите иметь глобальный модуль?
@arcseldon"name": "git+key:[email protected]/user/repo.git& Quot; возвращаетсяEISDIR: illegal operation on a directory, read, А также"name": "git+user:[email protected]/repo.git& Quot; возвращает несколько ошибок, включая эти словаremote: Not Found, fatal: repository, Command failed: git clone, Есть идеи?
@ThomasBormans - все еще есть проблемы? Пожалуйста, вставьте (зашифруйте свою команду / ключ API) то, что у вас есть в качестве строки в разделе зависимостей вашего package.json - согласно приведенным выше инструкциям. Я обнаружил, что это хорошо работает как для частных репозиториев GitHub, так и для Bitbucket. Что вы используете?
Попробуйте следовать "точному" Формат, который я дал в ответе: & gt; git + https: // & lt; myteamname & gt;: & lt; my_key & gt; @ bitbucket.org / & lt; my_repo_name & gt; .git Как вы сгенерировали ключ API? Вы дважды проверили, правильно ли это в ваших настройках bitbucket ... извините, чтобы спросить очевидное, но я почти на 100% уверен, что это должно работать.
8

и после некоторых поисков, я нашел Реджи (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"
}
27

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

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

npm install -S "git+https://[email protected]/orgname/repositoryname.git"

Например:

npm install -S "git+https://[email protected]/netflix/private-repository.git"

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

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

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

npm install github:mygithubuser/myproject
490

В вашемprivate npm modules добавлять

"private": true 

в ваш package.json

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

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
    }
}
Возможно ли это для частных репозиториев bitbucket git?
Я не понимаю, как эта командная строка может загружать код из частного репозитория github, если я не предоставляю свои учетные данные! Так как я могу передать свои учетные данные github?
В этом примере он ссылается на конкретный тег, но если у вас его нет, он по умолчанию будет мастером. (увидетьgit-scm.com/book/en/Git-Basics-Tagging)
Обратите внимание, что"private": true часть не обязательна, но она поможет предотвратить случайную публикацию вашего частного репо в публичный реестр npm.
Этоreal правильный ответ, если вы хотите, чтобы ваш package.json поддерживал список зависимостей частного репозитория, что является хорошей вещью (tm), которую вы должны делать
1

даже если машина находится под брандмауэром:

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

что я искал:

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:[email protected]/username/my-new-project.git#master
$ npm install git+ssh://[email protected]/username/my-new-project.git#master

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

Похожие вопросы