How to install a private NPM module without my own

2019-01-01 11:56发布

问题:

I\'ve taken some shared code and put it in an NPM module, one I don\'t want to upload to the central registry. The question is, how do I install it from other projects?

The obvious way is probably to set up my own NPM registry, but according to the documentation, that involves a lot of hassle.

Can I just install an NPM module that sits on the local filesystem, or perhaps even from git?

npm install --from-git git@server:project

回答1:

cd somedir
npm install .

or

npm install path/to/somedir

somedir must contain the package.json inside it.

It knows about git too:

npm install git://github.com/visionmedia/express.git


回答2:

In your private npm modules add

\"private\": true 

to your package.json

Then to reference the private module in another module, use this in your package.json

{
    \"name\": \"myapp\",
    \"dependencies\": {
        \"private-repo\": \"git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0\",
    }
}


回答3:

Can I just install an NPM package that sits on the local filesystem, or perhaps even from git?

Yes you can! From the docs 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)

Isn\'t npm brilliant?



回答4:

Update January 2016

In addition to other answers, there is sometimes the scenario where you wish to have private modules available in a team context.

Both Github and Bitbucket support the concept of generating a team API Key. This API key can be used as the password to perform API requests as this team.

In your private npm modules add

\"private\": true 

to your package.json

Then to reference the private module in another module, use this in your package.json

    {
        \"name\": \"myapp\",
        \"dependencies\": {
            \"private-repo\":
\"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git\",
        }
    }

where team name = myteamname, and API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Here I reference a bitbucket repo, but it is almost identical using github too.

Finally, as an alternative, if you really don\'t mind paying $7 per month (as of writing) then you can now have private NPM modules out of the box.



回答5:

FWIW: I had problems with all of these answers when dealing with a private organization repository.

The following worked for me:

npm install -S \"git+https://username@github.com/orgname/repositoryname.git\"

For example:

npm install -S \"git+https://blesh@github.com/netflix/private-repository.git\"

I\'m not entirely sure why the other answers didn\'t work for me in this one case, because they\'re what I tried first before I hit Google and found this answer. And the other answers are what I\'ve done in the past.

Hopefully this helps someone else.



回答6:

I had this same problem, and after some searching around, I found Reggie (https://github.com/mbrevoort/node-reggie). It looks pretty solid. It allows for lightweight publishing of NPM modules to private servers. Not perfect (no authentication upon installation), and it\'s still really young, but I tested it locally, and it seems to do what it says it should do.

That is... (and this just from their docs)

npm install -g reggie
reggie-server -d ~/.reggie

then cd into your module directory and...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

finally, you can install packages from reggie just by using that url either in a direct npm install command, or from within a package.json... like so

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

or..

dependencies: {
    \"foo\": \"http://<host:port>/package/foo/1.0.0\"
}


回答7:

Structure your code in an accessible fashion like below. If this is possible for you.

  • NodeProjs\\Apps\\MainApp\\package.json

  • NodeProjs\\Modules\\DataModule\\package.json

Within MainApp @ NodProjs\\Apps\\MainApp\\

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

You may need to update package.json as:

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

This worked for my situation.



回答8:

Starting with arcseldon\'s answer, I found that the team name was needed in the URL like so:

npm install --save \"git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git\"

And note that the API key is only available for the team, not individual users.



回答9:

Npm now provides unlimited private hosted modules for $7/user/month used like so

cd private-project
npm login

in your package json set \"name\": \" @username/private-project\"

npm publish

then to require your project:

cd ../new-project
npm install --save @username/private-project


回答10:

Config to install from public Github repository, even if machine is under firewall:

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


回答11:

I use the following with a private github repository:

npm install github:mygithubuser/myproject


回答12:

Very simple -

npm config set registry https://path-to-your-registry/

It actually sets registry = \"https://path-to-your-registry\" this line to /Users/<ur-machine-user-name>/.npmrc

All the value you have set explicitly or have been set by default can be seen by - npm config list



回答13:

This was what I was looking for:

# 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