やりたいこと
GitHub Packages を使って社内向けのライブラリを作成して、npm のパッケージとして公開する💪
TypeScriptを使用しています。
この記事ではnpmに公開するまでを対象としています。
ライブラリを使う方法は以下記事で書いているのでよかったら見てみてください🤗
やること一覧
- package.json を設定する
- tsconfig.json を設定する
- 関数を作成する
- GitHub Actions を設定する
- リリースを作成する
Package.json を設定する
今回やりたいことと関係ない部分は省略しています。
{
"name": "@{GitHubのOrganization名}/{リポジトリ名}",
"version": "1.0.0",
"description": "自作ライブラリ",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"publishConfig": {
"access": "restricted",
"registry": "https://npm.pkg.github.com/"
},
"repository": {
"type": "git",
"url": "git://github.com/{@GitHubのOrganization名}/{リポジトリ名.git}"
},
"author": "",
"license": "UNLICENSED",
"devDependencies": {
"typescript": "^4.9.4"
}
}
重要な箇所だけ説明します。
name
@{GitHubのOrganization名}/{リポジトリ名}
のように設定します。
ライブラリをインストールする際に以下のように使用します。
$ npm install @{GitHubのOrganization名}/{リポジトリ名}
types
ライブラリに型定義ファイルを含める場合は types を設定します。
publishConfig
パッケージを公開するレジストリを指定できます。
"access": "restricted"
で private なパッケージになります。
repository
GitHub リポジトリの URL と一致している必要があります。
tsconfig.json を設定する
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"declaration": true,
"sourceMap": false,
"outDir": "./dist/",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true
},
"exclude": ["node_modules", "dist"],
"include": ["src"]
}
上記だと ES Modules にしか対応していないので、CommonJS にも対応したい場合は以下の記事を参考にしていただければと思います。
関数を作成する
index.ts は関数をエクスポートするだけにしました。
export { func } from './features/filename';
GitHub Actions を設定する
リリース作成時に自動でトランスパイルして、Packageとして公開するようにします。
.github/workflows/publish.yml
を作成します。
name: npm publish
on:
release:
types: [published]
jobs:
publish-gpr:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
registry-url: 'https://npm.pkg.github.com'
scope: '@{GitHubのOrganization名}'
- run: |
npm ci
npm run build
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
secrets.GITHUB_TOKEN
はリポジトリに元々備わっているものなので設定は必要ありません。
リリースを作成する
GitHub でリリースを作成して、パッケージが npm に公開されるか確認しましょう。
リリースの作成方法は以下をご参照ください。
感想
GitHub Packages は導入コストが低いので便利だなと感じました。
これまで複数箇所に同じ処理が書かれていてヤキモキしていたので、ライブラリとして管理できるのがとっても楽しみです🤗
参考