mkdir typescript-react-app
npx create-react-app . --template typescript
# プロジェクト作成時に入ったライブラリを一旦削除
Remove-Item -Recurse -Force node_modules, package-lock.json
# 本番環境構築、衝突防止として--legacy-peer-depsをつける
npm install --save-exact `
react@17.0.1 react-dom@17.0.1 react-scripts@4.0.0 `
@chakra-ui/react@1.2.1 @chakra-ui/icons@1.0.17 `
@emotion/react@11.1.4 @emotion/styled@11.0.0 `
framer-motion@4.1.17 react-router-dom@5.2.0 axios@0.21.1 `
--legacy-peer-deps
# 開発環境構築、衝突防止として--legacy-peer-depsをつける
npm install --save-dev --save-exact `
typescript@3.9.10 `
@types/react@17.0.0 @types/react-dom@17.0.0 `
@types/react-router-dom@5.1.7 `
--legacy-peer-deps
{
"compilerOptions": {
...
"jsx": "react"
},
"include": ["src"]
}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
// React 17 まで の標準描画メソッド
// React 18 は、createRootを使用する
ReactDOM.render(
<React.StrictMode><App /></React.StrictMode>,
document.getElementById('root')
);
FROM node:14
WORKDIR /app
# npmをv8系統にアップグレード
# --legacy-peer-depsでpeer依存を許容
# peer依存: 並走の依存関係を宣言する仕組み
COPY package*.json ./
RUN npm install -g npm@8 && npm install --legacy-peer-deps
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
version: "3.8"
services:
react:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- CHOKIDAR_USEPOLLING=true
stdin_open: true
tty: true