7

使用NPM/Yarn管理Unity3D中的依赖

 2 years ago
source link: https://discretetom.github.io/posts/unity3d-with-yarn/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
  • Unity3D 自带的 Package Manager 不好使
    • 首次加载比较慢
    • 官方 Registry 里面的内容有限(虽然也可以从本地文件 / Git Repo / Assets Store 加载)
    • GUI 哪有命令行方便(暴论)
      • 比如一次性安装/删除多个依赖包
      • 或者做版本管理,安装指定版本的包
      • 对于第三方包,先下载,再在编辑器里面通过 GUI 点来点去进行导入,哪有命令行方便
  • 我想跨项目复用一些代码片段
    • 不一定每个代码片段都是一个 Repo。可能是一个 Repo 里面的几个文件或文件夹
    • 可能大部分时间用来 自用,所以不想申请额外的账号和提交表单

简言之,提升开发效率。

当前除了 Unity Package Manager,还有一些第三方的包管理库,比如OpenUPM, upm-packages.dev,可以和此文的方案混合使用

What?

需求如下:

  • 可以仅导入 GitHub Repo 里面的某个文件夹,而不一定是整个 Repo
  • 拥有互联网行业主流编程语言的包管理体验,比如 npm / yarn / pip / go / cargo / maven
    • 当然,如果能直接拿来用岂不是更妙
  • 依赖管理与版本控制
    • 代码片段之间可以互相设置依赖,并自动管理依赖树

基于 npm/yarn 的解决方案

因为目前代码主要放在 GitHub,所以理论上只要是能从 GitHub 上面安装依赖的包管理工具,都可以直接拿来使用,比如 npm/yarn

当然,是基于package.json文件进行包的定义与依赖管理

需要下载安装的时候,只需要

yarn add <username>/<repo>
npm install <username>/<repo>

仅导入某个文件夹

需要使用一个叫做 GitPkg 的工具,可以把 GitHub 上面某个文件夹视为一个 package

对应的,每个视为 package 的文件夹下面都应该有一个package.json文件来定义这个包

目前已经实现了一些包,放在了 unity3d-utils Repo 里面。可以看到它的文件目录就是:

─2D
│  └─CollisionManager2D
│          CollisionManager2D.cs
│          package.json
│          README.md
│          yarn.lock
│
└─General
    └─LayerMaskExtension
            LayerMaskExtension.cs
            package.json
            README.md

可以看到文件夹CollisionManager2D和文件夹LayerMaskExtension里面都有package.json文件

并且CollisionManager2D还依赖了LayerMaskExtension,我们只需要安装前者,就可以自动安装它的依赖树。

更多细节,可以看看这个 Repo 的源码:unity3d-utils

开始使用吧!

  1. 在 Unity3D Editor 里面,创建一个文件夹用来放 npm/yarn 管理的依赖。比如Assets/Modules/
  2. 在此文件夹中,执行yarn init -y创建空的package.json文件
  3. 执行yarn add xxx就可以安装所需的依赖啦!
    1. 另外,建议把node_modules/添加到.gitignore,或者添加完整的 NodeJS 的.gitignore
    2. 当需要在其他机器下载项目的时候,也需要执行yarn / yarn install来安装所有依赖
  • GitPkg 目前只能用来转换 public repo,毕竟它没权限访问 private repo
    • 不过它是开源的,有兴趣应该可以自建来解决此问题
  • package.json要求包的名字都是小写,这导致下载下来的包的文件夹是小写命名,不是很符合 C# 的风格
    • 虽然强行大写也没啥问题,但是有 warning 就很不爽

其他方案?

当然此博客只是一个思路。使用其他包管理工具也可以实现类似的效果。

使用 npm/yarn 是因为 nodejs:

  • 比较方便跨平台安装(特别是 windows)
  • 依赖管理方案比较统一/直观/成熟
  • 支持从 github 下载依赖
  • 安装的依赖也默认安装在工作目录

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK