美文网首页
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