内网 Package 管理
内网 Package 管理
目标 & 背景
一般来说,商业公司可能出于各种考量,会使用内网的开发环境,此时针对 Docker
、NuGet
、UMP
的服务全部都无法正常使用,同时公司也会自行维护一些自有的框架,也要解决包管理的问题
这篇文章希望通过介绍 SonaType Nexus1(下面简称为 Nexus) 的具体使用场景,补全一些网络上教程的空白,后面主要对 UMP
的使用场景进行介绍
从这些问题存在的角度上来看,这种属于商业公司基础建设的工具链,而相关的技术文章又很少
但是如果你们只需要解决 UMP
的内网问题,推荐用 Verdaccio2,并搭配 mob-sakai3 大佬的仓库使用,这个解决方案最适合 Unity,Nexus 并不能完美兼容这个要自行取舍(也可能可以,但我们没找到方案)
准备工作
首先你需要一台机器可以同时访问内网和外网,其原理也很简单,同一台电脑插两根网线,一根连接内网,一根连接外网,最后用 Nginx 统一转发一下即可
实际公司的网络拓扑可能会比较复杂,但实现原理都是一样的
接着对客户端机器配置 host 文件,假设当前内外网机器的 内网 ip 为 10.0.0.123 外网 ip 为 10.0.100.123,然后根据客户端内外网情况配置一下即可,具体域名可以随意修改
内网 | 外网 | |
---|---|---|
host | 10.0.0.123 npm.公司名.com | 10.0.100.123 npm.公司名.com |
最后按照官方文档1 的安装步骤,将 Nexus 安装好就可以开始了
Nexus 配置
我们需要准备两组 Repository
,一组给公司自建的框架代码使用,一组给 Unity 官方包使用
unity-hosted
为自建代码unity.com-proxy
为 Unity 官方包
请注意区分两个仓库的 Type 类型, 一个是 hosted 一个 是 proxy,最后我们在 unity.com-proxy
仓库中指定一下仓库源地址 https://packages.unity.com/
此处的 URL 就是项目中真实需要的地址
Unity 配置
Unity 的配置也很简单,我们希望接管所有 Unity
的 package 请求,那么在 Scopes
中就需要填写 com.unity
自建的仓库
unity-hosted
也是一样的道理,只是Scopes
变成了com.公司名
自建仓库具体使用
具体目录结构参考如下:
├── .git
├── .gitignore
├── Assets
│ ├── .gitignore
│ ├── .npmrc
│ ├── Runtime
│ ├── Runtime.meta
│ ├── package.json
│ └── package.json.meta
│ ...
由于 Unity 自建的 package 比较特殊,开发 package 的 git 仓库需要包含 Assets
、Packages
等文件夹,但是 npm 发布的,仅需要包含指定文件夹,如当前示例中的 Assets
文件夹
所以我们需要按照这种方式进行构建,注意这里有两份 .gitignore
文件,一份是给 package git 仓库忽略用的,另一个 Assets/.gitingore 文件是给 npm publish 时忽略用的
这里使用 Assets/.npmignore 也可以
而 Assets/.npmrc
和 Assets/package.json
就是 npm 包管理中最重要的文件了
package.json
我们可以使用下发代码创建 package.json 文件,按照交互式命令行填写即可
npm init
最后按照 Unity4 的包管理标准增加或修改部分内容,这里便不做介绍了,随便找一份官方的 package.json 参考就行
.npmrc
具体结构如下,这里的 _auth
是给 Nexus 鉴权使用的,需要自己根据规则生成 base64 的编码格式
# 生成 base64 编码
echo -n '账号:密码' | openssl base64
cat .npmrc
# 最终配置
registry=https://xxx/repository/unity-hosted/
always-auth=true
_auth=base64账号密码
发布
按照上方过程配置好后,发布过程非常简单,一行命令就可以搞定了
npm publish
如果需要修改版本,我们可以通过 npm 已经提供好的命令直接修改 package.json 中的 version,更具体的建议阅读官方文档5
# 现在是 1.0.0
npm version patch
# 现在是 1.0.1
npm version minor
# 现在是 1.1.0
npm version major
# 现在是 2.0.0
参考
- 感谢你赐予我前进的力量