重要说明:根据Unity中国团队的反馈,官方对于私有npm服务器的态度还不确定(担心滥用)。现在国际版Unity不限制私有服务器,可以直接使用私有服务器;国内版Unity限制私有服务器, 需要联系Unity团队发放License才能使用私有服务器 。这个License是个独立的License,不是Unity Personal/Pro的那个License。最好仔细评估需求后再决定是否要使用私有npm服务器。
如果私有npm服务器可以在浏览器正常访问,但Unity配置了私有npm服务器之后Console报错Unable to connect "http://localhost:4873"
,则表明需要申请License。
版本需求:
Windows操作系统
在Node.js下载页面下载最新LTS版安装包,然后运行安装包进行安装即可。
Ubuntu操作系统
Verdaccio的 4.5.0
及更高版本要求Node.js的版本不低于 10
,但Ubuntu 20.04的包管理器默认只能安装 8.x
版本的Node.js,所以这里要执行一些额外的命令,不过也很简单。在终端依次执行以下2条命令即可安装Node.js:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
上面第一条命令中的url中的 12
可以替换成 10
或 14
,对应将要安装的Node.js的版本。12
是LTS版本,没特殊需求的话用LTS版本比较好。
其他Linux版本参考 Node.js安装指令文档 。
Windows操作系统
在命令提示符(或PowerShell)中 以管理员身份 执行以下命令安装Verdaccio:
npm install -g verdaccio
如果命令提示符(或PowerShell)报错提示 无法加载文件xxx,因为在此系统中禁止执行脚本 ,在命令提示符(或PowerShell)中 以管理员身份 执行以下命令,然后再重新执行上面的安装命令:
Set-ExecutionPolicy RemoteSigned
Linux操作系统
在终端中执行以下命令安装Verdaccio:
sudo npm install -g verdaccio
执行命令后,等待安装完成即可。如果终端报错提示 permission denied ,尝试用以下命令代替上面的安装命令:
sudo npm install -g verdaccio --unsafe-perm=true --allow-root
在终端(或命令提示符或PowerShell)中执行以下命令启动Verdaccio服务器:
verdaccio
Verdaccio启动后不会返回交互窗口,而是会一直打印运行日志,直到进程结束。日志的起始几行会说明当前服务器的配置文件位置以及访问地址。如下图所示:
启动完成后,在浏览器中访问私服地址(本例中是 http://localhost:4873/
),可看到如下页面:
至此,私有npm服务器的搭建完成。Verdaccio的更多配置方法和高级用法,可以参考官方发布的 Verdaccio配置文档 。
首先需要在Unity的Package Manager中安装 Package Development 包,后续的自建包的管理过程依赖此包。
安装好 Package Development 包后,在Package Manager窗口的左上角 加号菜单 中会多出一个 Create Package… 选项。
点击 Create Package… ,在出现的输入框中输入自己的包名(以MyPackage为例,后同),然后点击 Create 按钮,即可完成创建。
等待Unity导入新包完成后,Project窗口的Packages文件夹中会多出一个 MyPackage 文件夹,选中文件夹中的 package.json 文件,即可在Inspector窗口编辑包的manifest信息。包的manifest信息中主要包含了包的 唯一标识名称 、 显示名称 、 版本号 、 类型 、 支持的最低Unity版本 、 简要说明 、 依赖项 和 可见性 。
其中包的 类型 会影响包在编辑器中的可见性,但Unity文档中未对此项做出说明,可以在设置时将包的 可见性(Visibility in Editor) 设为 总是可见(Always Visible) 。如果不小心隐藏了包,可以在Package Manager窗口中找到该包,然后点击窗口右下角的 笔形按钮 打开包的manifest信息编辑窗口重新设置可见性。
更详细的包配置说明,可以参考官方发布的包Manifest文档。
配置好包信息后,即可将自己的代码和资源文件按类型放置到 MyPackage 文件夹下的对应文件夹中。
包开发完成后,可以在Package Manager窗口中选中包,通过窗口底部的按钮对包进行 测试 、 验证 、 移除 、 编辑信息 和 发布 。点击 发布 按钮,即可将包在本地发布为tarball压缩包。发布成功后Console会输出tarball压缩包所在文件夹的路径。
在向私服发布包前,要先登录到私服。如果没有登录过,可以在终端执行下面的命令,然后按提示依次输入 用户名 、 密码 和 邮箱 即可完成登录:
npm adduser --registry http://localhost:4873
登录成功后,终端会输出提示信息:
Logged in as your_name on http://localhost:4873/.
将发布得到的tarball解压,然后在终端中进入包文件夹的跟目标(和package.json同级),之后在终端中执行以下命令即可将包发布到私服:
npm publish --registry http://localhost:4873
执行命令后终端输出包信息,最后一行会显示包的名称和版本:
+ [email protected]
注意,一定不要忘记加 --registry http://localhost:4873
参数,否则会将包发布到公共的npm服务器上(如果没有登录则会发布失败)。如果不小心将包发布到了公共npm服务器上,可以在 24 小时内删除(Verdaccio私服不限制删除)。删除已发布的包的命令是:
npm unpublish --force --registry http://localhost:4873
发布完成后,刷新本地服务器主页,可以看到包已经在主页列出。点击包名,可以查看更详细的信息。
为了避免干扰,首先把通过Package Manager创建的本地的 MyPackage 从项目中移除。
打开Unity工程包配置文件 manifest.json (工程根目录/Packages/manifest.json),在其中添加 scopedRegistries
属性,如下所示:
{
"scopedRegistries": [
{
"name": "My Registry",
"url": "http://localhost:4873",
"scopes": [
"com.mycompany"
]
}
],
"dependencies": {
...
}
}
上面的配置中, url
是私有npm服务器的地址, scopes
用于包名匹配,暂时没有发现 name
属性的用途。注意 scopedRegistries
和 scopes
的类型,是数组。
关于包名匹配的详细说明,可以参考官方的 私有包服务器文档。
完成上一步的注册后,打开Unity的Package Manager窗口,将包的筛选条件选为 All packages ,在 Advanced 菜单中启用 Show preview packages (如果发布包前对包进行过验证,则无需启用此项)。等包列表刷新完成后,可以在列表中找到 MyPackage ,此后可以像使用其他由Unity发布的包一样使用自己的包。