TypeScriptのプロジェクトを作る度に設定すると思うのでメモ。
前提 Link to heading
- Webpackでプロジェクトを管理している
- Linterはeslintを使用している
tsconfig.jsonの設定 Link to heading
tsconfig.jsonのcompilerOptionsを設定してsrc以下のディレクトリに対してエイリアスを貼る。
エイリアスになる文字は何でも良いが、私はnpm経由でimportするmoduleと混同しないように @/
を使用している。
{
"compilerOptions": {
~~~
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
},
~~~
}
}
Webpackのresolveの設定 Link to heading
Webpackのmoduleの解決にtsconfigで設定したエイリアスが使われるように設定する。
import { Configuration } from 'webpack';
const config: Configuration = {
~~~
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
alias: {
'@': path.resolve(__dirname, 'src')
}
},
~~~
};
export default config;
eslintの設定 Link to heading
Webpackでプロジェクトをビルドするだけなら上記2つの設定だけで大丈夫だが、eslintでimport/no-unresolved
を設定しているとエイリアスが解決できずエラーになる。
そこでeslint-import-resolver-webpackを導入して、eslintのimportの解決にWebpackの設定を使用するようにeslintrcに設定を加える。
まずは以下のコマンドでeslint-import-resolver-webpackを追加する。
yarn add -D eslint-import-resolver-webpack
次にeslintrcのsettings
に以下のようにWebpackの設定を使用するように設定を加える。
{
~~~
"settings": {
"import/resolver": "webpack"
}
~~~
}
これでeslintでもエイリアスを認識して、エラーも出なくなる。
おまけ Link to heading
せっかくエイリアスを設定したので、親を指定した相対パスでのimportがあるとエラーになるように以下のruleをeslintrcに設定する(子を指定した相対パスはmodule内では使用したいので禁止していない)。
{
"rules": {
~~~
"import/no-relative-parent-imports": "error",
~~~
}
}
これで親を指定した相対パスでのimportがあった場合eslintをかけたときにエラーで怒られるようになった。