はじめに
../../../foo/bar
とか書きたくない。
~/components/foo/bar
みたいなパスで書きたい。
この文章執筆時の関連するpackageのversion
{
"babel-plugin-module-resolver": "3.1.1",
"eslint-import-resolver-babel-module": "5.0.0-beta.0", // betaじゃないと正常に動作しなかった
"eslint-plugin-import": "2.11.0",
"flow-bin": "0.69.0"
}
babel-plugin-module-resolver
tleunen/babel-plugin-module-resolver
"plugins": [
["module-resolver", {
"root": [
"./src"
],
"alias": {
"~": "./src"
}
}]
]
まずは好きなようにaliasを書きます。
flow
※ flowを導入していない環境の場合は飛ばして下さい
[options]
module.name_mapper='^~/\(.*\)$' -> '<PROJECT_ROOT>/src/\1'
flowが参照を解決できるようにflowconfigのoptionに記述を加えます。
ESLint
benmosher/eslint-plugin-importが入っている環境を前提にします。
settings:
import/resolver:
babel-module:
root:
- ./src
alias:
~: ./src
ESLint側からmodule-resolver
のaliasを解釈するためにtleunen/eslint-import-resolver-babel-moduleを使います。
上記のように.babelrc
に記述したaliasを同様に記述することでESLintがエラーを吐かなくなります。
(エラーを吐く場合はpackageのversionを確認して下さい。この記事はeslint-import-resolver-babel-module: 5.0.0-beta.0
を用いています。)
以上でbabel-plugin-module-resolver
を用いたaliasを貼ったimport環境が完成です。
おまけ:VSCode
VSCodeの話になりますが、Path Autocomplete を使うことでmoduleのimportを記述するのがとてもラクになります。
というかたとえbabel-plugin-module-resolver
を使ってない環境でもimportのサジェストをしてくれるのでおすすめです。
{
"path-autocomplete.pathMappings": {
"~": "${folder}/src"
}
}
これもまた同様に.babelrc
に書いたaliasを同じように書きます。
これでimport foo from '~/'
と書いていくと~
をsrc
からで補完してくれます。
※ GIFとかなくてごめんなさい💦
おわりに
以上のセットアップで好きなようにaliasを貼って快適なmoduleのimport環境を構築することができました。
相対パスでimportするのはリファクタリングの際などに大変な思いをすることになるので、うまくaliasを使っていきましょう。