NPMパッケージを作って公開することで、ポートフォリオの強化もできて、便利なコードをコミュニティと共有できる。この間、自分の初めてのNPMパッケージを、漫画ビューアー(github.com/Mangatsu/mangatsu-reader)を、まだ完全にα版みたいなものではあるが、作って公開した。このガイドでは、TypeScriptプロジェクトのリポジトリをセットアップして、便利なリンティングツールを使う設定、最後にパッケージをNPMに公開する方法を説明するよ。
npmパッケージの場合、MIT(またはISC)がシンプルで使いやすいからおすすめ。でも、使い方によってはApache 2.0(特許付き)や(A)GPL 3.0みたいな強力なコピーレフトライセンスが合うかも。LICENSE
(もしくはCOPYING
)ファイルを作成するのを忘れないように!
npm init
でプロジェクトを初期化する。
mkdir name-of-the-package
cd name-of-the-package
npm init -y
package.json
ファイルが生成される。git init
でGitを初期化して、.gitignore
ファイルを作成。rimraf
をインストール。
npm install --save-dev typescript @types/node rimraf
tsconfig.json
ファイルを作成して、TypeScriptの設定を行う。
{
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"types": ["node", "react"],
"jsx": "react",
"useDefineForClassFields": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowImportingTsExtensions": false,
"resolveJsonModule": true,
"allowJs": false,
"declaration": true,
"outDir": "./lib",
"declarationDir": "./lib",
"isolatedModules": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
"skipLibCheck": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "lib"]
}
src
ディレクトリからファイルをコンパイルして、lib
ディレクトリに出力される。npm install --save-dev prettier eslint prettier-eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
eslint.config.mjs
:
{
"semi": false,
"trailingComma": "all",
"singleQuote": false,
"tabWidth": 2,
"useTabs": false,
"printWidth": 120,
"endOfLine": "lf"
}
npm install --save-dev husky lint-staged
npx husky install
package.json
に以下を追加。
"lint-staged": {
"*.{ts,tsx,js,jsx}": "eslint --cache --fix",
"*.{ts,tsx,js,jsx,css,md}": "prettier --write"
}
"scripts": {
"prepare": "husky"
}
echo "npx lint-staged" > .husky/pre-commit
package.json
に tsc
, clean
, build
コマンドを追加。
"scripts": {
"tsc": "tsc -p tsconfig.json",
"clean": "rimraf lib && rimraf build",
"build": "npm run clean && npm run tsc"
}
npm run build
で src
から lib
ディレクトリにTypeScriptファイルがコンパイルされる。lib
フォルダにコピーする。
"scripts": {
"copy-assets": "node -e \"require('fs').cpSync('./src/assets', './lib/assets', {recursive: true});\"",
}
"scripts": {
"build": "npm run clean && npm run tsc && npm run copy-assets"
}
npm login
package.json
のメタデータを更新: package.json
に、名前、バージョン、説明、メイン、ライセンス、ファイルフィールドを追加。ファイルフィールドでパッケージに含まれるファイルを指定する。
{
"name": "name-of-the-package",
"version": "0.1.0",
"description": "",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"type": "module",
"files": [
"lib/"
],
"repository": {
"type": "git",
"url": "github.com/<user,org>/<name-of-the-package>"
},
"keywords": [
"typescript"
],
"author": "Marko Kristian Leinikka",
"license": "MIT"
}
npm publish
。初回公開時には npm publish --access public
でパッケージを公開することができる。これで、リンティング、フォーマット、プレコミットフック、アセットコピーを含むビルドプロセスを備えたTypeScript NPMパッケージが作成できた。ユーティリティ関数やライブラリを公開するとき、このセットアップがスムーズなワークフローと高品質なコードを維持するのに役立つ。
このガイドに沿って、TypeScriptパッケージをNPMに自信を持って公開し、綺麗でメンテナンスしやすいコードベースを管理できるようになるはず。