npmよりyarn派の自分用に環境構築の備忘録
パッケージ | バージョン |
---|---|
node.js | 18.16.0 |
React | 18.2.0 |
TypeScript | 5.1.3 |
ESlint | 8.43.0 |
@typescript-eslint/eslint-plugin | 5.60.1 |
@typescript-eslint/parser | 5.60.1 |
Prettier | 2.8.8 |
目次
create react-app
VScodeのターミナルで
$ yarn create react-app プロジェクト名 --template typescript
構文チェックの ESlint と Prettier 導入
先程作成したプロジェクトのディレクトリに移動し、
$ yarn add -D eslint prettier eslint-config-prettier
これらは開発時だけ必要ので、-D
のオプションをつける。eslint-plugin-prettier
は非推奨になっているので、推奨のeslint-config-prettier
を導入する。
ESlint の初期設定
$ yarn eslint --init
# You can also run this command directly using 'npm init @eslint/config'.
# Need to install the following packages:
@eslint/create-config@0.4.5
# Ok to proceed? (y) y
ターミナルでyarn eslint --init
と入力すると、You can also run ~(中略)~ OK to Proceed? (y)
と質問される場合はy
と答える。
√ How would you like to use ESLint? · style
√ What type of modules does your project use? · esm
√ Which framework does your project use? · react
√ Does your project use TypeScript? · No / Yes
√ Where does your code run? · browser
√ How would you like to define a style for your project? · guide
√ Which style guide do you want to follow? · standard-with-typescript
√ What format do you want your config file to be in? · JavaScript
Checking peerDependencies of eslint-config-standard-with-typescript@latest
The config that you've selected requires the following dependencies:
eslint-plugin-react@latest eslint-config-standard-with-typescript@latest @typescript-eslint/eslint-plugin@^5.50.0 eslint@^8.0.1 eslint-plugin-import@^2.25.2 eslint-plugin-n@^15.0.0 eslint-plugin-promise@^6.0.0 typescript@*
√ Would you like to install them now? · No / Yes
√ Which package manager do you want to use? · yarn
質問に回答していくと下記の設定ファイル(.eslintrc)が生成される。
module.exports = {
env: {
browser: true,
es2021: true
},
extends: [
'standard-with-typescript',
'plugin:react/recommended'
],
overrides: [
{
env: {
node: true
},
files: [
'.eslintrc.{js,cjs}'
],
parserOptions: {
sourceType: 'script'
}
}
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module'
},
plugins: [
'react'
],
rules: {
}
}
ESlintのTypeScript用パッケージを追加
$ yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser
.eslintrc.jsに設定を下記の通りに追記する。
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: [
'standard-with-typescript',
'plugin:react/recommended',
// TypeScript用プラグインを追加
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
// Prettierのコード整形に上書きするために extends の最後に記述
'prettier',
],
overrides: [
{
env: {
node: true,
},
files: ['.eslintrc.{js,cjs}'],
parserOptions: {
sourceType: 'script',
},
},
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
// TypeScript用設定を追加
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
// TypeScript用プラグインを追加
plugins: ['react', '@typescript-eslint'],
rules: {
// React17から不要になった import React from 'react'; に対応
'react/jsx-uses-react': 'off',
'react/react-in-jsx-scope': 'off',
},
ignorePatterns: [
'build/',
'public/,',
'**/node_modules/',
'*.config.js',
'.*lintrc.js',
'/*.*'
],
};
ESLintを適用しないファイルの指定をignorePatterns: []
の項目に正規表現を用いて記述する。
Prettierの設定
プロジェクトのディレクトリ直下に .prettierrc を作成し設定を記述する。
{
"singleQuote": true,
"semi": true,
"printWidth": 120,
"tabWidth": 2
}
【VScode】保存時に自動的に静的解析とコード整形
VScodeにESlintとPrettierの拡張機能(プラグイン)をまだ導入していない場合は、
ESlintとPrettier – Code formatter をインストールする
settings.jsonの生成・開き方
【VScode】settings.jsonを開く
自動保存設定 や フォントサイズ などのVScodeの設定は settings.json に保存されています。ユーザー設定とワークスペース設定と競合する場合、ワークスペース設定が優…
.settings.json に設定を記述する。
{
"editor.defaultFormatter": null,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
reportWebVitals.ts の修正
srcディレクトリ内の reportWebVitals.ts に型定義が必要と旨のエラーがでるので下記の記述に修正する。
import type { ReportHandler } from 'web-vitals';
const reportWebVitals = (onPerfEntry?: ReportHandler): void => {
if (onPerfEntry != null && onPerfEntry instanceof Function) {
void import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;
コメント