💏
開発中のnpmライブラリをローカルプロジェクトで使おう
ローカルリポジトリにある開発中のライブラリを別のローカルのプロジェクトで使うならnpm link
が便利という話。
例
たとえばmy-library
という名前のライブラリをmy-library
リポジトリで開発しているとする。
package.json
{
"name": "my-library",
"version": "0.0.0",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"scripts": {
"dev": "tsc -w",
"build": "tsc"
},
"license": "MIT",
"devDependencies": {
"typescript": "^5.1.6",
}
}
- このライブラリリポジトリ内のルートで
npm link
コマンドを打つ - 他のプロジェクトのルートで
npm link my-library
コマンドを打つ -
npm install
をしなくとも次のようにライブラリをimportできる
main.ts
import * as MyLibrary from 'my-library';
これで、開発途中のライブラリに変更を加えながらメインのプロジェクトを進めることができる。
注意点
ライブラリを変更している際に、importしたライブラリの型が認識されないことがある。
npm link LIBRARY
コマンドを実行すると、node_modules
内にLIBRARY
という名前のシンボリックリンクが張られる。ちなみにシンボリックリンクとは、他のリソースへの参照リンクである。リンクの参照先はnpm link
を実行したローカルのリポジトリだ。
このような場合は、tsconfigのcompilerOptions.preserveSymlinks
をtrue
に設定するとよい。
シンボリックリンクを実体パスへ解決しないという Node.js の同名フラグを反映したオプションです。
ライブラリのビルドを行うとシンボリック関連で問題が発生することがある。preserveSymlinks
フラグがオンになっていると、TypeScriptはsymlinkのリンク先を見ないようにしてくれる。
おわり
どんどんライブラリを作って楽をしていこう。
Discussion