Markdown 管理 CLI を作って npm パッケージ化する

ローカルリポジトリの Markdown エントリを管理する CLI を TypeScript で制作し、npm パッケージ化して公開してみました。

    Loading...

TypeScript ライブラリ制作の勉強の一環で、@s-inoue0108/mdcli というパッケージを作っています。このツールの紹介がてら、npm パッケージとして開発するうえで躓いた部分を忘れないうちに残しておこうと思います。

@s-inoue0108/mdcli
Command line tool for management Markdown (.md) file.. Latest version: 0.1.22-alpha, last published: a day ago. Start using @s-inoue0108/mdcli in your project by running `npm i @s-inoue0108/mdcli`. There are no other projects in the npm registry using @s-inoue0108/mdcli.
@s-inoue0108/mdcli favicon www.npmjs.com
@s-inoue0108/mdcli

## 参考

zenn-cli という OSS をかなり参考にしました。これは Zenn↗ が提供する CLI ツールで、記事をローカルの Markdown で管理できるようになります。

zenn-cli
Preview Zenn content locally.. Latest version: 0.1.159, last published: 13 days ago. Start using zenn-cli in your project by running `npm i zenn-cli`. There are no other projects in the npm registry using zenn-cli.
zenn-cli favicon www.npmjs.com
zenn-cli

今回のパッケージは、zenn-cli からプレビュー機能(フロントエンド部分)を除いた形をモデルとして開発しています。

また、パッケージングにあたってはこれらの記事を参考にしています。

npm パッケージを TypeScript で自作して公開、別モジュールからインストールして使うまでの手順
npm パッケージを TypeScript で自作して公開、別モジュールからインストールして使うまでの手順 favicon zenn.dev
npm パッケージを TypeScript で自作して公開、別モジュールからインストールして使うまでの手順
Node パッケージ を npmjs に公開するうえで知っておくべきこと
Node パッケージ を npmjs に公開するうえで知っておくべきこと favicon zenn.dev
Node パッケージ を npmjs に公開するうえで知っておくべきこと

## tsconfig.json をつくる

今回はトランスパイル済みの JS のみを npm のリポジトリに流したいので、dist ディレクトリにビルド生成物を吐くように設定します。

tsconfig.json
"outDir": "./dist"

## npm パッケージ化する

package.json を生成して、中身をいじります。

npm init
package.json
{
  "name": "@s-inoue0108/mdcli",
  "version": "0.1.0",
  "description": "hogehoge",
  "main": "dist/mdcli.js",
  "scripts": {
    "build": "tsc",
    "prepare": "npm run build",
  },
  "type": "module",
  "author": "Shota Inoue",
  "license": "MIT",
  "publishConfig": {
    "access": "public"
  },
  "files": [
    "dist"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/s-inoue0108/mdcli.git"
  },
}

一部のフィールドの説明を書いておきます。

  • main
    • エントリポイントとなるファイルのパスを記述します。
  • scripts
    • npm スクリプトを設定します。prepare を設定しておくと、npm installnpm publish 時に設定値のスクリプトが実行されます(publish 時にトランスパイルしてくれる)。
  • files
    • npm install 時に node_modules にロードするディレクトリやファイルを指定できます(ホワイトリスト)。対照的に、.npmignore はブラックリストの役割を果たします。パッケージ使用時はトランスパイル済みの JS しかいらないためこのような設定にしています。

ひととおり設定したら、以下のコマンドでパッケージを公開します。@username で名前空間をつけてあるパッケージは access=public でのみ公開できます。

npm publish

### package.json の細かい設定

zenn-clinpm install した直後に npx zenn init で初期化することができます。このような挙動は、エントリポイントとなる JS へのエイリアスを package.jsonbin フィールドに貼ることで達成できます。

package.json
"bin": {
  "zenn": "dist/mdcli.js"
}

また、package.json はユーザー定義のフィールドを使用することもできます。

Discussions