美文网首页
yarn install github repo

yarn install github repo

作者: 张培_ | 来源:发表于2018-10-20 21:26 被阅读291次

background

想要使用yarn从github上安装package, 但是有些比较难处理的部分:

  • 需要安装的Github repo在enterprise Github上

    虽然我们的enterprise Github 部署在公网,但是通过okta登录之后才能access,因此不能够保证yarn能够拉取

  • 如果使用GitHub作为yarn的dependency,那么这个github的地址应该满足怎样的要求?repo中的内容又要满足什么样的要求?是不是什么样github repo都能放在node_module被正常是使用?

  • 需要将Github repo中的内容发布到npm registry中吗?

失败尝试

  • 想要使用Github API直接让yarn去download release的压缩包

    //package.json
    "example-react-form": "git@git.*****.com.au:our-organization/our-repo/tarball/v0.7.1-builder"
    //key: value
    
    • 结果失败
    Couldn't find any versions for "example-react-form" that matches "git@git.*****.com.au:our-organization/our-repo/tarball/v0.7.1-builder"? Please choose a version of "example-react-form" from this list: (Use arrow keys)
      - verison1
      - verison2
      ...
    

    按照报错的翻译,yarn似乎将我的github url地址直接理解成了example-react-form的version了

    说明:

    • 我的Github repo地址写错了

Q1:为什么会match到example-react-form,甚至还给我提供了example-react-form中的版本?

原因:在下面的描述中假设package.json中的左半边是key,右半边是value。

  • 执行yarn install的流程

    • 根据给定的value,yarn会去判断应该到哪里寻找这个package(本地folder/npm registry/github..)
    • 确定好目标地址,然后利用给定的value,拼接成最后的resolved path

    根据我们给定的value,yarn将地址理解成一个已经在npm registry 的package。

    • 对于那些在npm registry中的dependency

      • yarn会将key作为packagename,value作为version。
      • 使用key@value拼成resolved path.

      结果,yarn在npm registry上根本找不到example-react-formgit@git.*****.com.au:our-organization/our-repo/tarball/v0.7.1-builder版本,只好给出example-react-form上的所有版本让我选择。

  • 假如"npm" registry上没有你给定的key,那么就会报错

Couldn't find package "example-react-form" on the "npm" registry.

Q2:这个地址名为啥会有问题呢?

搜罗了npm install的doc,有两种情况match这种case:

  • npm install <tarball url>: In order to distinguish between this and other options, the argument must start with http:// or https://

    说明虽然我的value也是一个tarball,但是使用方法明确跟doc上不一样。

    修改为:

    "example-react-form": "https://****/origanziation/example-react-form/tarball/v0.7.1-builder"
    
    • 继续报错Extracting tar content of undefined failed, the file appears to be corrupt: "Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?"

    出现这样的错误,主要原因是,yarn无权访问enterprise github,所以根本找不到压缩包。才会报错。

    • 一旦使用Github的公有地址(企业Github的地址) 就会出现这种错误

    看起来这种方式没有可能了,那么我们换下一种方式

  • npm install <git remote url>

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

      • protocol: is one of git, git+ssh, git+http, git+https, or git+file.

      • #<commitId>: 会获取对应commit的code

      • #<tagName>: 会获取对应tagName相对的commit的code

      • #semver:<semver>: <semver>可以对应一个tagname,下载对应tag的内容

      一样两个参数如果都没有设置,那么会使用master上最近的commit的code

      最后使用

      //package.json  
      "example-react-form": "git+ssh:git@git.*****.com.au:our-      organization/our-repo.git#v0.7.1-builder"//key: value
      

解惑

npm 可以接受很多类型作为dependency,但是前提必须是npm project,也就是说这个folder中要包含package.json文件

  • 可以是一个folder(本地path)
  • 可以是一个压缩包(本地path)
  • 可以是一个远端的压缩包(github tarball)
  • 可以是一个发布在register的压缩包(<name>@<version>)
  • 可以是一个git repo

但是path的写法需要严格按照文档的要求去写

相关文章

网友评论

      本文标题:yarn install github repo

      本文链接:https://www.haomeiwen.com/subject/lntvzftx.html