カテゴリー
【Node.jsお役立ちツール紹介】link-module-aliasで快適なモジュールリンクパスのエイリアスを付ける
※ 当ページには【広告/PR】を含む場合があります。
2020/11/15
Node.jsを利用したブロジェクトでリソースファイルが多くなってきて、フォルダ分け+深い階層化してくると、npmモジュールのインポートの際の
そんなお悩みを解決してくれるかもしれない
相対パス地獄とは
nodejsを利用したプロジェクト開発が進んでくる段階で、相対パス地獄はふとした時に遭遇してしまいます。
例えば単体テストをソースファイルとは別に、
test
$ tree
.
├── index.ts
├── src
│ ├── a.ts
│ └── lib
│ ├── a.lib.ts
│ └── model
│ ├── a.model.ts
│ └── base
│ └── a.base.ts
└── test
├── index.spec.ts
└── src
├── a.spec.ts
└── lib
├── a.lib.spec.ts
└── model
├── a.model.spec.ts
└── base
└── a.base.spec.ts
このプロジェクトの一番深い階層に位置している
a.base.spec.ts
a.base.ts
import {
hoge,
piyo,
fuga
} from '../../../../../src/lib/model/base/a.base';
//...以下略
インポートする側のファイルと、エクスポートする側のファイルの階層間距離が遠ければ遠いほど、この相対パスの記述が長々となってしまうのが、nodejsプログラマーが一度は出くわすであろう
相対パス地獄
VSコードのような高機能エディタにはIntelliSense機能からオートコンプリートでインポートしたいファイルの相対パスを確認できるので、通常この問題も見逃されがちですが、コードの可読性という点ではやはり生産性の高いやり方とは言えません。
そこでもっとより良い相対パスの呼び出し方を提供してくれるライブラリの出番となります。
相対パスをエイリアス化できるユーティリティ・link-module-alias
今回紹介するのは
同列のユーティリティでほぼ同じ機能となる
link-module-aliasを使う大きなメリットとして、ビルド前にプロジェクトの全てのモジュールへの静的シンボリックリンクをして、あたかも
node_modules
module-aliasではソースコード中にrequireしなければならなかったため、パッケージの読み込みが少し技巧的だったのに対し、
link-module-alias
ただしまだバグが多い印象で、定期的に問題が報告されていますので、挙動が不安定になったらgithubプロジェクトのissueのページを覗いてみる良いと思います。
前置きはさておき、link-module-aliasをプロジェクトに導入してみます。
なおパッケージマネージャは
yarn
$ yarn add link-module-alias -D
これだけで準備完了です。
パッケージをインストールしただけでは何も起こらないので、次にシンボリックリンクを作成します。
プロジェクトのpackage.jsonを以下のように追加・修正します。
{
//...中略
"scripts": {
//...中略
//👇postinstallというスクリプトにlink-module-aliasコマンドを指定
"postinstall": "link-module-alias",
//...中略
},
"_moduleAliases": {
"~src": "src",
"~lib": "src/lib",
"~model": "src/lib/model",
"~base": "src/lib/model/base"
}
//以下略
package.jsonへ追加する項目もとてもシンプルで、パッケージインストール後に走る
postinstall
npm install
yarn install
_moduleAliases
エイリアスの命名ルールなどは整理されていないのでかなり自由度が高いです。
もともとサードパーティ製のライブラリで利用されていることの多い
@
もちろん
@
~
#
では
_moduleAliases
$ yarn postinstall
#👇もしくはlink-module-aliasコマンドを直接呼び出す
#$ ./node_modules/.bin/link-module-alias
link-module-alias: ~src -> src, ~lib -> src/lib, ~model -> src/lib/model, ~base -> src/lib/model/base
すると
node_modules
~src
~lib
~model
~base
早速このエイリアスを利用してインポートをこころみると、先程のソースコードは以下のように短く簡潔に呼び出せるようになります。
import { hoge, piyo, fuga } from '~base/a.base';
//...以下略
まとめ
先んじて開発初期からインストールしておくことで、ライブラリの在処をあれこれ気にする必要のない効率的なプロジェクト管理環境構築が可能となります。
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー