在GitHub创建一个新仓库作为测试GitHub Package使用,我创建的仓库地址:airglass/test-github-package。从GitHub Setting,按下图步骤创建“Personal access tokens”(简称PAT)。
PAT可作为管理GitHub仓库或其它需要授权才能使用的API的密钥使用,发布GitHub Package对应“Write”操作,安装GitHub Package对应”Read“操作,此两种操作都需明确要设置“读/写”GitHub Package权限。如下图,勾选“write:packages”权限后,“repo”和“read:package”权限自动勾选。
生成PAT后,不要立即刷新或关闭当前页面,否则将再也看不到如下图创建的PAT。停留在当前页面完成后续步骤。
将下方这一行代码添加到“~”家目录下的“.npmrc”文件中,并将“ACCESS_TOKEN”替换为在上面创建的PAT。
//npm.pkg.github.com/:_authToken=ACCESS_TOKEN
这是我的“~/.npmrc”文件,我已经将上面的一行代码添加到文件的最后一行了。此时就可以关闭或刷新刚才创建PAT的页面。
回到最一开始你创建的“test-github-package”仓库,将仓库代码Clone到你的电脑上。我已经把这个测试项目clone到我的电脑上了。
在terminal中分别执行下面两行命令:进入你的测试项目目录内(“test-github-package”替换成你的项目目录名);初始化NPM(-y选项表示稍后自动创建的package.json会全部使用默认值):
cd test-github-package
npm init -y
对package.json做一些修改。在“name”属性的原有名称前加上你的GitHub用户名,并且使用“@”符号开头,用“/”符号分隔用户名和项目仓库名称。添加一个新属性publishConfig
,顾名思义,设置package要发布的位置——发布到github而不是默认的npm。如下是我对package.json所作的修改:
{
"name": "@airglass/test-github-package",
...
"publishConfig": {
"registry":"https://npm.pkg.github.com"
},
...
}
发布Github Package
回到terminal,执行“npm publish”,等待一会儿,名为“@airglass/test-github-package”的package就发布成功了。
在真实的项目中,未编译的源文件一般会存放在“src”目录,构建后的文件会放在“dist”目录。“dist”一般不会提交到代码仓库,所以会在项目根目录下添加“.gitignore”文件(类似文件黑名单),将“dist”目录加入其中,出现在其中的文件或目录都不会提交到GitHub仓库。
此时用“npm publish --dry-run”命令测试发布一下(此命令不会真正发布package),发现此时发布的package中也不会包含“dist”目录了。添加空的“.npmignore”文件(类似文件黑名单),即可覆盖“.gitignore”对发布package时忽略那些文件产生的影响。
一句话总:对于控制哪些文件或目录会被Git版本管理,取决于“.gitignore”文件,对于控制哪些文件或目录会随package发布,“.npmignore”的优先级高于“.gitignore”文件。
但我希望发布的package中只包含构建后的“dist”目录,而不包含“src”目录,只需在“.npmignore”中添加一行“src”,发布的包中就不会包含“src”目录及其中的文件。
控制发布的包中需要包含哪些文件,白名单或许比黑名单更好用。“.gitignore”和“.npmignore”都是黑名单,出现在其中的文件要么不会被Git管理,要么不会发布到包。“package.json”中有个“files”属性类似白名单,它能控制哪些文件或目录会发布。“files”属性的优先级高于“.npmignore”。
...
"files": [
"dist"
],
...
安装GitHub Package
用npm install
命令安装package,需要将”–registry“选项设置为“https://npm.pkg.github.com”,否则默认从“https://registry.npmjs.org”搜索要安装的package,发生因找不到package而安装失败的问题。
npm install @airglass/test-github-package@1.0.0 --registry=https://npm.pkg.github.com
也可在项目根目录下创建“.npmrc”文件,以指定在该目录安装的所有packages都从这个registry源下载:
registry=https://npm.pkg.github.com
用“–prefix”选项设置指定的安装位置,如安装到当前相对路径下的my-packages目录中:
npm install --prefix ./my-packages @airglass/test-github-package@1.0.0
自定义安装位置后的目录结构如下:
my-packages
|- node_modules
|- @airglass
|- test-github-package
|- package.json
|- README.md
.npmrc
package-lock.json