J'ai pris du code partagé et l'ai mis dans un module NPM, un module que je ne souhaite pas télécharger dans le registre central. La question est, comment puis-je l'installer à partir d'autres projets?
Le moyen le plus évident est probablement de configurer mon propre registre NPM, mais selon la documentation, cela implique beaucoup de tracas.
Puis-je simplement installer un module NPM installé sur le système de fichiers local, ou peut-être même à partir de git?
npm install --from-git git@server:project
cd somedir
npm install .
ou
npm install path/to/somedir
somedir
doit contenir le package.json
à l'intérieur.
Il sait aussi à propos de git:
npm install git://github.com/visionmedia/express.git
Dans vos modules npm privés add
"private": true
à votre package.json
Ensuite, pour référencer le module privé dans un autre module, utilisez ceci dans votre package.json
{
"name": "myapp",
"dependencies": {
"private-repo": "git+ssh://[email protected]:myaccount/myprivate.git#v1.0.0",
}
}
Puis-je simplement installer un paquet NPM qui se trouve sur le système de fichiers local, ou peut-être même à partir de git?
Oui, vous pouvez! Depuis les documents https://docs.npmjs.com/cli/install
Un package est:
- a) un dossier contenant un programme décrit par un fichier package.json
- b) une archive contenant un (a)
- c) une URL qui résout en (b)
- d) un
<name>@<version>
publié dans le registre avec (c)- e) un
<name>@<tag>
qui pointe vers (d)- f) un
<name>
qui a une "dernière" balise satisfaisant (e)- g) un
<git remote url>
qui résout en (b)
NPM n'est-il pas brillant?
Mise à jour janvier 2016
_ {En plus d'autres réponses}, il arrive parfois que vous souhaitiez disposer de modules privés disponibles dans un contexte d'équipe.
Github et Bitbucket prennent en charge le concept de génération d’une équipe clé API. Cette clé API peut être utilisée en tant que password pour effectuer des demandes d'API en tant que cette équipe.
Dans vos modules private npm add
"private": true
à votre package.json
Ensuite, pour référencer le module privé dans un autre module, utilisez ceci dans votre package.json
{
"name": "myapp",
"dependencies": {
"private-repo":
"git+https://myteamname:[email protected]/myprivate.git",
}
}
où nom de l'équipe = monnoméquipe et clé API = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4
Ici, je fais référence à un repo bitbucket, mais il est presque identique en utilisant github aussi.
Enfin, au lieu de cela, si cela ne vous dérange pas vraiment de payer 7 $ par mois (au moment de la rédaction de cet article), vous pouvez désormais disposer de modules NPM privés prêts à l'emploi.
FWIW: Toutes ces réponses me posaient problème lorsque je traitais avec un référentiel d’organisation privée.
Ce qui suit a fonctionné pour moi:
npm install -S "git+https://[email protected]/orgname/repositoryname.git"
Par exemple:
npm install -S "git+https://[email protected]/netflix/private-repository.git"
Je ne suis pas tout à fait sûr pourquoi les autres réponses n'ont pas fonctionné pour moi dans ce cas-là, car c'est ce que j'ai essayé d'abord avant d'avoir frappé Google et trouvé cette réponse. Et les autres réponses sont ce que j'ai fait par le passé.
Espérons que cela aide quelqu'un d'autre.
J'ai eu le même problème et après quelques recherches, j'ai trouvé Reggie ( https://github.com/mbrevoort/node-reggie ). Il semble assez solide. Il permet une publication légère des modules NPM sur des serveurs privés. Pas parfait (pas d'authentification lors de l'installation), et c'est encore très jeune, mais je l'ai testé localement, et il semble faire ce qu'il dit qu'il devrait faire.
C'est ... (et cela vient de leur documentation)
npm install -g reggie
reggie-server -d ~/.reggie
puis cd dans votre répertoire de module et ...
reggie -u http://<Host:port> publish
reggie -u http://127.0.0.1:8080 publish
enfin, vous pouvez installer des paquets à partir de reggie simplement en utilisant cette URL soit dans une commande d'installation directe de npm, soit depuis un package.json ... comme si
npm install http://<Host:port>/package/<name>/<version>
npm install http://<Host:port>/package/foo/1.0.0
ou..
dependencies: {
"foo": "http://<Host:port>/package/foo/1.0.0"
}
Structurez votre code de manière accessible comme ci-dessous. Si cela est possible pour vous.
NodeProjs\Apps\MainApp\package.json
NodeProjs\Modules\DataModule\package.json
Dans MainApp @ NodProjs\Apps\MainApp\
npm install --S ../../Modules/DataModule
Vous devrez peut-être mettre à jour package.json en tant que:
"dependencies": {
"datamodule": "../../Modules/DataModule"
}
Cela a fonctionné pour ma situation.
En commençant par la réponse de arcseldon , j'ai découvert que le nom de l'équipe était nécessaire dans l'URL, comme ceci:
npm install --save "git+https://myteamname@[email protected]/myteamname/myprivate.git"
Et notez que la clé API n'est disponible que pour l'équipe, pas pour les utilisateurs individuels.
Npm fournit maintenant un nombre illimité modules hébergés privés pour 7 $/utilisateur/mois utilisé de la sorte
cd private-project
npm login
dans votre paquet json set "name": " @username/private-project"
npm publish
alors d'exiger votre projet:
cd ../new-project
npm install --save @username/private-project
Vous pouvez utiliser Verdaccio à cette fin, qui est un registre de proxy privé léger npm construit dans Node.js. En outre, il est gratuit et open-source. En utilisant Verdaccio, cela n’entraîne pas beaucoup de problèmes comme le ferait un simple registre privé npm.
Vous pouvez trouver des informations détaillées sur la façon de l'installer et de l'exécuter sur leur site web mais voici les étapes:
Il nécessite 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
Il possède également un menu fixe, ce qui vous permet de le publier facilement sur votre menu fixe et voilà, vous avez un référentiel privé npm qui peut être distribué aux autres de la manière que vous le configurez!
C'était ce que je cherchais :
# 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
J'utilise les éléments suivants avec un référentiel privé github:
npm install github:mygithubuser/myproject
Configuration à installer à partir du référentiel Github public, même si la machine est sous pare-feu:
dependencies: {
"foo": "https://github.com/package/foo/tarball/master"
}
Très simple -
npm config set registry https://path-to-your-registry/
En fait, registry = "https://path-to-your-registry"
cette ligne est définie sur /Users/<ur-machine-user-name>/.npmrc
Toute la valeur que vous avez explicitement définie ou définie par défaut est visible sous - npm config list