設置環境
1. 註冊 npm 的帳號
npm (npmjs.com)
2. 安裝 Node.js
Node.js (nodejs.org)
npm 官方宣稱只要是 LTS 版本,哪個都可以。使用 Node.js 的安裝器就會自帶 npm。
但是,官方不推薦使用 Node.js 的安裝器,原因是安裝器把 npm 放在只有本地權限的資料夾。
(自己的環境使用安裝器,好像不是大問題)
發佈
1. 打開 cmd,移至你的 package 目錄
2. 登入 npm
npm login // 接下來會叫你輸入帳號密碼
3. 檢查 package.json
確定名稱用的是 com.<companyname>.<packagename> 格式
4. 直接發佈,npm 認的就是 package.json
npm publish
因為 Unity 目前不支援 npm 的 scope 功能,所以只能發佈到公開的 npm 檔案庫。
應該說你當然可以發佈到自己的 scope 下,但是 Unity 沒辦法抓到。
不支援 npm 的 scope 功能
不支援 npm 的 scope 功能
不支援 npm 的 scope 功能
很重要所以講三次
這時候你可能就會發現,大家都上傳到同一個檔案庫,那名稱不是很容易跟別人衝突嗎?
沒錯,這就是讓人很吐血的狀況,但這時候回頭看看 Unity 官方希望套件名稱使用 com.<companyname>.<packagename> 格式,的確可以解決名稱衝突問題,雖然這個格式原本應該不是用來解決這問題的。
至於 npm 本身並沒有所謂的推薦命名法,給大家自行解決紛爭,畢竟正常來說都會用 scope。
如果希望只有特定人員才能取得 package,其實你也可以自己弄個 registry server 上傳,而不是使用 npm 的 registry,公司可能就會有這種需求。
移除發佈
第一次使用,為了測試,可能會需要移除發佈。可以用下面指令移除。
但要非常注意,移除之後,在 24 小時內不能再次發佈相同名稱的套件。
npm unpublish --force
使用套件
打開 manifest.json 直接修改,加入 npm 的檔案庫後,再像平常一樣加入套件和版本即可。
特別注意 scopes 這個欄位,其實只是字串開頭的過濾器而已,跟 npm 的 scope 沒啥關係,所以這個欄位加上 com.<companyname> 即可。
{
"scopedRegistries": [
{
"name": "My NPM Registry", // 名稱自己決定,看的順眼就好
"url": "https://registry.npmjs.org/",
"scopes": [
"com.<companyname>"
]
},
// ...
],
"dependencies": {
"com.<companyname>.<packagename>": x.y.z,
// ...
}
}