【问题标题】:How to install an npm package from GitHub directly如何直接从 GitHub 安装 npm 包
【发布时间】:2013-07-04 18:48:40
【问题描述】:

尝试从 GitHub 安装模块会导致此错误:

package.json 上的 ENOENT 错误。

使用 express 轻松复制:

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

【问题讨论】:

  • 谁能给出 package.json devDependencies 格式?
  • @Adam 您可以将"express": "github:visionmedia/express" 添加到package.json file"dependencies" 部分,然后运行:npm install(如下所述)
  • @danny,这对我不起作用。我想知道那个 express repo 中是否有一个 dist 文件夹来启用它。

标签: github npm npm-install node-modules


【解决方案1】:

因为https://github.com/visionmedia/express 是网页的 URL,而不是 npm 模块。使用这种风格:git+{url}.git

git+https://github.com/visionmedia/express.git

如果您需要 SSH,也可以使用这种风格:

git+ssh://git@github.com/visionmedia/express.git

【讨论】:

  • 你也可以使用git+https://github.com/visionmedia/express.git来使用https而不是ssh。
  • 请注意,您要安装的存储库必须是 npm 模块,它必须包含 package.json 文件,否则您将收到此错误:Error: ENOENT, open 'tmp.tgz-unpack/package.json'。跨度>
  • 如果我想要一个特定的分支怎么办
  • 我现在想到的唯一解决方案是使用 .../express.git#commit 指定提交
  • 值得一提的是,您可能需要转义 # 才能使用 shell 中的特定分支,即:npm install git+https://github.com/user/repo.git\#branch
【解决方案2】:

您也可以通过npm install visionmedia/express 从 GitHub 安装。

或者

npm install visionmedia/express#branch

还支持直接从 Gist、Bitbucket、GitLab 和许多其他专业格式进行安装。看看他们的npm install documentation

【讨论】:

  • 什么,不指定 URL? npm 如何知道您使用的是哪种风味托管服务?
  • @Jake Rayson:从version 1.1.65 开始就有可能,并且仅适用于github.com
  • 在 Windows 上对我不起作用 - 它只是尝试从我当前目录的子文件夹安装。
  • 请注意,从 npm 1.4.28 开始,这不适用于全局安装(即 npm i repo/pkg -g)
  • 请注意,您需要一个 package.json 文件。
【解决方案3】:

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

npm install --save https://github.com/Amitesh/gulp-rev-all/tarball/master

【讨论】:

  • 您也可以使用标签名称代替master。这样做可能更安全。
  • 是的。会更安全。感谢您关注这一点。
  • 当您使用分支时很好,您应该修改您的答案以包含一般格式的答案,我一开始没有注意到/tarball/
  • 这是从 Docker 容器中安装依赖项时唯一对我有用的答案。
  • 这对于不需要下载整个 repo 来说也是完美的。谢谢!
【解决方案4】:

截至 2016 年 9 月,现在可以从原始 HTTPS GitHub URL 安装:

npm install https://github.com/fergiemcdowall/search-index.git

您不能对所有模块都执行此操作,因为您正在从源代码控制系统读取数据,该系统很可能包含无效/未编译/有缺陷的代码。所以要明确一点(尽管应该不言而喻):鉴于存储库中的代码处于 npm 可用状态,您现在可以非常愉快地直接从 GitHub 安装。

2019 年 10 月,我们现在正经历“TypeScript/React/Babel”高峰期,因此 JavaScript 编译变得相当普遍。如果您需要考虑编译,请查看prepare。也就是说,NPM 模块不需要编译,并且明智的做法是假设编译不是默认的,尤其是对于较旧的节点模块(也可能对于非常新的、最前沿的“ESNext”-y)。

【讨论】:

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

还有npm install https://github.com/{USER}/{REPO}/tarball/{BRANCH}可以使用不同的分支。

【讨论】:

  • 我遇到了这个问题...github.com/yarnpkg/yarn/issues/2738我能够将注册表更改为 github tarball 注册表并且它有效.. 谢谢!
  • 这为我解决了一些主要的性能问题。使用 {USER}/{REPO}.git#{BRANCH} 非常慢。
  • 这 ^^^^ 是我一直在寻找的。我的库依赖于构建步骤并且没有prepare 脚本。我只是想在测试仓库中安装整个仓库的一个分支,但是由于构建的代码没有签入 GitHub,所以安装的只是 package.json 和自述文件。这种tarball 方法使用完整的 URL 安装了所有源文件,这正是我所需要的。
  • @jdunning 您无需将编译后的代码检查到 git 即可使用prepare 方法!您只需要注意还包括.gitignore:stackoverflow.com/questions/48287776/…
【解决方案6】:

npm's install documentation 以及此处的许多其他答案现在都很好地介绍了这些方法。

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>]

然而,最近发生的值得注意的变化是 npm 添加了 prepare 脚本来替换 prepublish 脚本。 这解决了一个长期存在的问题,即通过 Git 安装的模块没有运行prepublish 脚​​本,因此未完成将模块发布到 npm 注册表时发生的构建步骤。请参阅Run prepublish for Git URL packages #3055

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

【讨论】:

【解决方案7】:

当前顶部的answer by Peter Lyons 与最近的 NPM 版本无关。例如,现在可以使用在此答案中被批评的相同命令。

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

如果您仍然有问题,则可能是您使用的任何软件包都有问题。

【讨论】:

【解决方案8】:

语法的一般形式是

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

这意味着你的情况是

npm install git+ssh://git@github.com/visionmedia/express.git

来自 npmjs 文档:

npm 安装:

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

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>

| #semver:] 是 git、git+ssh、git+http 之一, git+https 或 git+file。

如果提供了#,它将被用来克隆那个 犯罪。如果 commit-ish 的格式为 #semver:, 可以是任何有效的 semver 范围或精确版本,npm 将查找 与远程存储库中该范围匹配的任何标签或引用,就像 它将用于注册表依赖项。如果既不是 # 也不是

semver: 指定,然后使用master。

如果存储库使用子模块,这些子模块将 也被克隆了。

如果正在安装的软件包包含一个准备脚本,它的 dependencies 和 devDependencies 将被安装,并且准备 脚本将在打包和安装包之前运行。

以下 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

【讨论】:

    【解决方案9】:

    你可以这样做:

    npm install git://github.com/foo/bar.git
    

    或在package.json

    "dependencies": {
      "bar": "git://github.com/foo/bar.git"
    }
    

    【讨论】:

      【解决方案10】:

      直接安装:

      npm install visionmedia/express
      

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

      npm install
      

      【讨论】:

        【解决方案11】:

        你也可以

        npm i alex-cory/fasthacks
        

        npm i github:alex-cory/fasthacks
        

        基本上:

        npm i user_or_org/repo_name
        

        【讨论】:

          【解决方案12】:

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

          npm i github:<UserName>/<RepoName>
          

          package.json

          {
              "dependencies": {
                  "name": "github:<UserName>/<RepoName>"
              }
          }
          

          【讨论】:

          • 这种方式更棒!
          【解决方案13】:

          你可以通过npm install命令直接安装一个GitHub仓库,像这样:

          npm install https://github.com/futurechallenger/npm_git_install.git --save
          

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

          1. 根据Dan Dascalescu's comment,也许您的存储库中必须有一个 dist 文件夹。
          2. 您的存储库中肯定必须有一个 package.json!我忘记添加了。

          【讨论】:

          • 您的仓库中不需要dist 文件夹或任何构建代码。您只需要在package.json 中使用prepare 脚本。
          【解决方案14】:

          简单:

          npm install *GithubUrl*.git --save
          

          例子:

          npm install https://github.com/visionmedia/express.git --save
          

          【讨论】:

            【解决方案15】:

            我尝试了npm install git+https://github.com/visionmedia/express,但这花费的时间太长,我不确定是否会奏效。

            对我有用的是 - yarn add git+https://github.com/visionmedia/express

            【讨论】:

              【解决方案16】:

              我可以从 github 存储库安装以下代码:

              npm install git+ssh://<your_repository_ssh_clone_link>#<branch_name_if_any>
              
              

              您可以通过以下方式获取 ssh 克隆链接:

              所以对于上面的截图库,你可能需要如下导入,

              npm install git+ssh://git@github.com:Siddhu2/calculator-chatbot.git#master
              

              master 是我的分支,它是可选的,因为我只有一个分支。

              【讨论】:

                【解决方案17】:

                如果你得到这样的东西:

                npm 错误! enoent undefined ls-remote -h -t https://github.com/some_repo/repo.git

                确保您更新到最新的 npm 并且您也拥有权限。

                【讨论】:

                  【解决方案18】:

                  唯一对我有用的命令是npm i MY_PACKAGE_NAME:MY_REPOSITORY#BRANCH_NAME

                  【讨论】:

                    【解决方案19】:

                    试试这个命令:

                     npm install github:[Organisation]/[Repository]#[master/BranchName] -g
                    

                    这个命令对我有用:

                     npm install github:BlessCSS/bless#3.x -g
                    

                    【讨论】:

                    • 不要在 NPM 安装中使用 SUDO!而是使用 chown 来更改所有者。
                    • 版本是标签/分支名还是package.json版本?
                    • @MarekFajkus 如果您使用 sudo 通过包管理器在 Linux 上安装...如果您想全局安装包,则必须使用 root
                    • @RayFoss 晚了一年但是......只有当您希望全局安装的软件包可供所有用户使用时,这种情况很少见。只需将 npm 配置为在~/node_modules 中安装全局包,然后您就不需要 sudo。
                    • 为什么有两个命令?都应该使用(按此顺序)。还是只有一个或另一个?这还不清楚。你能详细说明吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
                    猜你喜欢
                    • 1970-01-01
                    • 2017-04-13
                    • 2016-12-23
                    • 1970-01-01
                    • 2020-01-14
                    • 2014-12-29
                    • 2013-10-03
                    • 2019-08-31
                    • 2016-09-02
                    相关资源
                    最近更新 更多