create-react-appで作成したプロジェクトにimportのaliasを設定する
create-react-app
で作成したプロジェクトに import の alias(エイリアス)を設定する方法を紹介します。
webpack の設定
create-react-app
で作成したプロジェクトはwebpack
の設定をする項目がないので、craco
というパッケージをインストールして、webpack
の設定をできるようにします。
(craco
とは「Create React App Configuration Override」という意味のようです)
$ npm install -D @craco/craco
プロジェクトルート(package.json
と同じ場所)にcraco.config.js
というファイル名でファイルを作成します。
ここではsrc
フォルダまでのパスを@
として定義しています。
(require('path')
の箇所で「Require statement not part of import statement」のエラーが出るかもしれませんが、無視して問題ありません)
craco.config.js
const path = require('path');
module.exports = {
webpack: {
alias: {
'@': path.resolve(__dirname, 'src/'),
},
},
};
また、上記の設定ファイルが読み込まれるようにpackage.json
の以下のコマンドをreact-scripts
からcraco
に変更します。
package.json
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
"eject": "craco eject"
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
TypeScript の設定
TypeScript を使用している場合はtsconfig.json
に設定を追加します。
tsconfig.json
と同じ場所にtsconfig.paths.json
というファイル名でファイルを作成します。
tsconfig.paths.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
],
}
}
}
tsconfig.json
でこのファイルを読み込むようにします。
tsconfig.json
{
"extends": "./tsconfig.paths.json",
"compilerOptions": {
tsconfig.json
にpaths
の設定を記載しない理由は、ビルド時tsconfig.json
にpaths
の設定が消されてしまうためです。
そのため、面倒ですが、paths
は別ファイルで設定して、tsconfig.json
ではそのファイルを参照する形にしています。
ESLint の設定
上記の設定だけではまだvsocde
でエラーが出ている状態なので、ESLint
の設定を行います。
ESLint
の設定についてはcreate-react-appで作成したプロジェクトにESLintやPrettierなどの設定を行うで紹介しているので、参考にしてください。
eslint-import-resolver-alias
のプラグインをインストールします。
$ npm install -D eslint-import-resolver-alias
eslintrc.js
に以下の設定を追加します。
eslintrc.js
module.exports = {
settings: {
'import/resolver': {
alias: {
map: [['@', './src']],
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
};
以上で、設定は完了です。