npmのpackageを作る?

いくつかのPJで共通した処理があり、それぞれで書き直すのもめんどくさいので、packageを作りたくなったのだが、そこでふと、packageってどうつくればいいのか?と思い調べてみた。

publicに運用したい場合

npmやgithub packageなどが選択肢になる。 ただし、一度公開すると消せないと思っておく必要があるので、積極的にpublicにしたいかというと。。。

privateに運用したい場合

実は、gitリポジトリを作るだけでよい。 実際には、タグでversionを振らないと使いづらいが。

以下のような感じでgitリポジトリはnpmでインストールできる。

npm install git+https://github.com/<user>/<repo>.git#<tag or commit>

前提としてgitリポジトリには、package.jsonなどは作られているとする。(npm initなどを実行するなどして)

バージョンを更新したいときも同様。 なお、package.jsonのバージョンを書き換えても自分はうまくいかなかった。

Typescriptでpackageを作る場合

TypescriptのパッケージをNextjsでimportして実行しようとすると、以下のようなエラーがでる。

You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders

JSにトランスパイルしたものをインポートしてもエラーは解決できるが、いろいろめんどくさい。 Typescriptのまま実行できるようにするには、トランスパイルの設定が必要なので、以下のパッケージをインストールする。

npm install --save next-transpile-modules

そして、next.config.jsを以下のように書き換える必要がある。

/** @type {import('next').NextConfig} */
const nextConfig = withTM({
  reactStrictMode: true,
  swcMinify: true,
  transpilePackages: ['lib-xxx']
})

module.exports = nextConfig

lib-xxxをロードしたいパッケージ名に置き換えればいけるはず。 nextConfigの設定をwithTMに通すところが差分。

その他

gitサブモジュールを使うという方法もちょっと探ってみたものの、いまのところnodejsのプロジェクトはpackageで管理するのがよいのではという結論。