如何直接从GitHub安装npm包?

guy*_*abi 798 github npm node-modules npm-install

尝试从github安装模块导致:

package.json上的ENOENT错误.

使用快递轻松复制:

npm install https://github.com/visionmedia/express 抛出错误.

npm install express 作品.

为什么我不能从github安装?

这是控制台输出:

npm http GET https://github.com/visionmedia/express.git
npm http 200 https://github.com/visionmedia/express.git
npm ERR! not a package /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/tmp.tgz
npm ERR! Error: ENOENT, open '/home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-23-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "https://github.com/visionmedia/express.git"
npm ERR! cwd /home/guym/dev_env/projects_GIT/proj/somename
npm ERR! node -v v0.10.10
npm ERR! npm -v 1.2.25
npm ERR! path /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/guym/dev_env/projects_GIT/proj/somename/npm-debug.log
npm ERR! not ok code 0
Run Code Online (Sandbox Code Playgroud)

Pet*_*ons 1076

因为https://github.com/visionmedia/express是网页的URL而不是npm模块.使用这种味道:

git+https://git@github.com/visionmedia/express.git
Run Code Online (Sandbox Code Playgroud)

如果你需要SSH,还是这种味道:

git+ssh://git@github.com/visionmedia/express.git
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`git + https:// github.com/visionmedia/express.git`来使用https而不是ssh. (83认同)
  • 请注意,您要安装的存储库必须是**npm模块**,它必须包含`package.json`文件,否则您将收到此错误:`错误:ENOENT,打开'tmp.tgz-unpack/package. json'`. (41认同)
  • 值得一提的是,您可能需要转义`#`以使用shell中的特定分支,即:`npm install git + https://github.com/user/repo.git\#branch` (37认同)
  • 如果我想要一个特定的分支怎么办? (19认同)
  • 我现在想到的唯一解决方案是使用.../express.git#commit指定提交 (2认同)
  • @SuperUberDuper你显然无法使用ssh克隆其他人的repos,除非你的公钥被添加到项目中.请改用https. (2认同)
  • 安装后如何需要这样的模块...该模块最终会以类似@@ githubname / reponame`的层次结构出现...并且我尝试了各种组合,这些组合给了我`Error:找不到模块` (2认同)
  • @OhenepeePeps,您的 npm 包可能需要一个构建步骤(即“npm run build”)才能生成二进制文件/包文件(或者如果不是生成二进制文件的构建文件,则其他一些安装后步骤不会构建工件)在 git 源存储库中),所需模块可能无法找到那些不是从原始“npm install”安装/创建的工件。 (2认同)
  • 有没有办法在git repo中获取特定文件夹作为包? (2认同)

use*_*135 622

您也可以npm install visionmedia/express从Github安装

要么

npm install visionmedia/express#branch
Run Code Online (Sandbox Code Playgroud)

还支持直接从Gist,Bitbucket,Gitlab和许多其他专用格式进行安装.查看所有npm install 文档.

  • @Jake Rayson:自[版本1.1.65](https://www.npmjs.org/doc/files/package.json.html#github-urls)以来可能只适用于`github.com`. (20认同)
  • 什么,没有指定URL?npm如何知道您正在使用哪种风味托管服务? (18认同)
  • `npm install user/repo#branch`也可以. (18认同)
  • 请注意,从npm 1.4.28开始,这不适用于全局安装(即npm i repo/pkg -g) (7认同)
  • 在Windows上没有为我工作 - 它只是尝试从我当前目录的子文件夹安装. (5认同)
  • 请注意,您需要一个 package.json 文件。 (3认同)
  • 请注意,这些软件包永远不会自动更新。虽然如果存储库中有匹配的版本,则可以使用 semver 版本号而不是分支名称,但像 ^ 这样的通配符将不起作用。 (2认同)

Ami*_*esh 152

如果没有安装git,我们可以试试

npm install --save https://github.com/Amitesh/gulp-rev-all/tarball/master
Run Code Online (Sandbox Code Playgroud)

  • 很棒的答案!它对我有用,而其他命令(来自其他答案)则停留在一些git获取逻辑上. (9认同)
  • 很高兴当你使用分支机构时,你应该修改你的答案以包含一般格式的答案,我没有注意到`/ tarball /` (4认同)
  • 您还可以使用标签名称代替“master”。这样做可能更安全。 (2认同)
  • 这是唯一对我有用的解决方案 (2认同)
  • 这是从Docker容器中安装依赖项时唯一对我有用的答案。 (2认同)
  • 这也非常适合不需要下载整个存储库。谢谢! (2认同)

zak*_*ssi 51

还有npm install https://github.com/{USER}/{REPO}/tarball/{BRANCH}一个不同的分支.


Fer*_*gie 48

2016年9月更新

从vanilla https github URL安装现在似乎工作:

npm install https://github.com/fergiemcdowall/search-index.git
Run Code Online (Sandbox Code Playgroud)

编辑:有几个用户评论说您无法为所有模块执行此操作,因为您正在从源控制系统中读取,这可能包含无效/未编译/错误代码.所以要清楚(虽然它应该不言而喻):鉴于repo中的代码处于npm可用状态,你现在可以非常愉快地直接从github安装

  • 你不能从它的GitHub源安装你想要的任何npm包,除非repo包含一个`dist`文件夹,而大多数不包含.我链接的问题是一个npm错误 - 从GitHub安装时不会运行`prebuild`步骤.例如,尝试安装[node-influx/node-Influx](https://github.com/node-influx/node-influx/issues/224). (9认同)
  • 对于那些后来偶然发现的人......从npm5开始,npm将为裸"安装"运行任何`prepare`脚本,其中包括git deps.这意味着有关编译和dist文件夹的上述注释已过时.任何正确设置其编译以在`prepare`上运行的包都可以作为git dep工作,而无需将任何已编译的资源提交到git中. (7认同)
  • 没有`dist`文件夹的Repos可以从GitHub安装,例如:`npm install https:// github.com/fergiemcdowall/search-index-adder`工作正常. (4认同)
  • 是的,因为你在`/ lib`中有直接的usabel源(好像你有一个dist文件夹).我的观点是,在package.jons中包含repo的GitHub URL并不能保证能够安装该repo.例如,用TypeScript编写的模块需要将其转换后的代码推送到repo中.他们通常不会这样做,而是使用预发布脚本将.JS代码转储到dist文件夹中,然后上传到npmjs.com. (4认同)
  • 我知道这有点晚了,但诀窍实际上是npm没有与Git存储库的一对一映射.有些项目在发布之前而不是在提交之前构建它们的源文件,这意味着它们不在Git仓库中,而是在npm包中 - 这样做的项目不能直接从Git开始工作.另一个如何失败的例子是宏存储库 - 例如,Babel的GitHub项目在子文件夹中包含数百个单独的npm包.它们可以单独发布,因为npm不直接映射到Git.npm发布你目录中的任何内容. (2认同)

Col*_*n D 35

Peter Lyons目前的最佳答案与最近的NPM版本无关.例如,使用在这个答案中被批评的相同命令现在很好.

$ npm install https://github.com/visionmedia/express
Run Code Online (Sandbox Code Playgroud)

如果您继续遇到问题,那么您使用的任何软件包都可能存在问题.


Oma*_*iri 32

这对我有用,而且打字更少。

npm i github:<UserName>/<RepoName>
Run Code Online (Sandbox Code Playgroud)

package.json

{
    "dependencies": {
        "name": "github:<UserName>/<RepoName>"
    }
}
Run Code Online (Sandbox Code Playgroud)


nex*_*ech 30

这些方法现在在npm的安装文档以及其他许多答案中都有很好的介绍.

npm install git+ssh://git@github.com:<githubname>/<githubrepo.git[#<commit-ish>]
npm install git+ssh://git@github.com:<githubname>/<githubrepo.git>[#semver:^x.x]
npm install git+https://git@github.com/<githubname>/<githubrepo.git>
npm install git://github.com/<githubname>/<githubrepo.git>
npm install github:<githubname>/<githubrepo>[#<commit-ish>]
Run Code Online (Sandbox Code Playgroud)

但是,最近发生了变化的一件事是npm添加prepare脚本来替换prepublish脚本. 这解决了一个长期存在的问题,即通过git安装的模块没有运行prepublish脚本,因此没有完成将模块发布到npm注册表时发生的构建步骤.请参阅https://github.com/npm/npm/issues/3055.

当然,模块作者需要更新他们的package.json以使用new prepare指令开始工作.

  • 注意“.gitignore”文件的问题!/sf/ask/3380144351/#57503862 (2认同)

Sag*_*fek 18

现在更新您可以:npm install git://github.com/foo/bar.git
或在package.json:

"dependencies": {
  "bar": "git://github.com/foo/bar.git"
}
Run Code Online (Sandbox Code Playgroud)


ish*_*007 17

语法的一般形式是

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]
Run Code Online (Sandbox Code Playgroud)

这意味着你的情况

npm install git+ssh://git@github.com/visionmedia/express.git
Run Code Online (Sandbox Code Playgroud)

来自npmjs文档:

npm安装:

从托管的git提供程序安装包,使用git克隆它.对于完整的git远程URL,只会尝试该URL.

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>
Run Code Online (Sandbox Code Playgroud)

| #semver:]是git,git + ssh,git + http,git + https或git +文件之一.

如果提供了#,它将用于完全克隆该提交.如果commit-ish的格式为#semver:,则可以是任何有效的semver范围或精确版本,npm将查找远程存储库中与该范围匹配的任何标记或引用,就像它对注册表依赖项一样.如果不是#或

semver:指定,然后使用master.

如果存储库使用子模块,那么也将克隆这些子模块.

如果正在安装的软件包包含一个prepare脚本,则将安装其依赖项和devDependencies,并在打包和安装软件包之前运行prepare脚本.

以下git环境变量由npm识别,并在运行git时添加到环境中:

  • GIT_ASKPASS
  • GIT_EXEC_PATH
  • GIT_PROXY_COMMAND
  • GIT_SSH
  • GIT_SSH_COMMAND
  • GIT_SSL_CAINFO GIT_SSL_NO_VERIFY

有关详细信息,请参阅git手册页.

例子:

npm install git+ssh://git@github.com:npm/npm.git#v1.0.27
npm install git+ssh://git@github.com:npm/npm#semver:^5.0
npm install git+https://isaacs@github.com/npm/npm.git
npm install git://github.com/npm/npm.git#v1.0.27
GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git npm install
Run Code Online (Sandbox Code Playgroud)


sul*_*rza 15

Sometimes I need to install from a specific branch or commit. To make things simple I just use https://gitpkg.vercel.app/

在此输入图像描述


Tyl*_*ong 14

直接安装:

npm install visionmedia/express
Run Code Online (Sandbox Code Playgroud)

或者,您可以添加"express": "github:visionmedia/express"到文件"dependencies"部分package.json,然后运行:

npm install
Run Code Online (Sandbox Code Playgroud)


Ale*_*ory 9

你也可以这样做

npm i alex-cory/fasthacks
Run Code Online (Sandbox Code Playgroud)

要么

npm i github:alex-cory/fasthacks
Run Code Online (Sandbox Code Playgroud)

基本上:

npm i user_or_org/repo_name
Run Code Online (Sandbox Code Playgroud)


Khu*_*ari 7

简单的:

npm install *GithubUrl*.git --save
Run Code Online (Sandbox Code Playgroud)

例子:

npm install https://github.com/visionmedia/express.git --save
Run Code Online (Sandbox Code Playgroud)


Bru*_*Lee 6

您可以直接安装一个GitHub库npm install命令,如下所示: npm install https://github.com/futurechallenger/npm_git_install.git --save

注意:在将通过npm命令安装的仓库中:

  1. 也许你必须有一个DIST在你回购的文件夹,根据@丹Dascalescu的评论。
  2. 您一定要在回购中包含package.json!我忘了补充。