Create react from scratch - Lauviah0622/Lavi-Note GitHub Wiki
使用 React 會遇到兩個問題:
- JSX
- ES6 語法
- Bundle
- 引入 Typescript
- Dev 時 hot reload
- ESlint
除此之外如果要弄成一個好用的 React 專案,應該還會需要做的有:
-
可以引入 CSS
-
可以引入圖片
-
SVG 引入成 component
-
還有希望可以用 webpack 以外的方式來 bundle dev server。
- src:放 react 相關的東西
- public 放一些
要選定給 react 做 render 的 element,也就是 id 為 root 的 div
再來是要把 JS 引入<script src="../dist/bundle.js"></script>
要用的 babel 有
- @babel/core:
- @babel/cli:
- @babel/preset-env:compile 成 es5 的語法
- @babel/preset-react:[?]
babel preset 的使用方法蠻簡單,就建立一個 .babelrc
,然後把 preset 加進去就可以了
{
"presets": ["@babel/preset-react", "@babel/preset-env"]
}
preset 是啥?
Webpack 需要以下的東西
- webpack
- webpack-cli
- webpack-dev-server
- style-loader
- css-loader
- babel-loader
webpack
- module:定義說哪些不同的
- rules:可以定義說哪些的內容享用哪些插件
- resolve (?)
- output:budle 好的東西要怎麼處理
- public
- publicPath:要放哪裡
- 設定 webpack
-
設定入口點
entry
輸出位置output
-
設定module
- 使用
babel-loader
來讓 babel compile
- 使用
-
設定避免瀏覽器 cache
- 在 output 中加入 hash
- 運用
html-webpack-plugin
來導入入口點:自動幫你生成 index.html 的 html 入口點
-
dev-server
-
- 設定
.babelrc
- 需要兩個 preset:
-
@babel/preset-env
用來支援 es6 語法 -
@babel/preset-react"]
支援 JSX 之類的東西
-
- 需要兩個 preset:
- npm 指令
- start :
webpack --mode development
webpack 的開發模式,會 compile 出有很多註解的檔案,也可以用 dev-serverwebpack-dev-server --mode development --open --hot
,比較方便,改東西後會自己 compile,但要下載webpack-dev-server
- build production :
webpack --mode development
webpack 的測試模式
- start :
目前看到的風向有點雜欸
- CRA 內建方式
利用
@pmmmwh/react-refresh-webpack-plugin
搭配 加上 webpack 內建的 HMR,
wenpack 內建的 HMR 和 react 基本上沒有關係
https://github.com/gaearon/react-hot-loader 原本大家都用這個,但 devtool v4 更新之後讓這個東西用不了了,然後 dan 就提出一個實現方法
https://github.com/facebook/react/issues/16604#issuecomment-528663101 Dan 哥的 Rough Guide,裡面有提到需要
- "Hot module replacement" mechanism in the module system.
- That is usually also provided by the bundler.
- E.g. in webpack, module.hot API lets you do this.
- React renderer 16.9.0+ (e.g. React DOM 16.9)
- Or [email protected] or higher for custom renderers
- react-refresh/runtime entry point
- react-refresh/babel Babel plugin
這個是 dan 哥的依照上面 的 Rough Guide 實現的東西,但這個只有 https://github.com/facebook/react/tree/0e100ed00fb52cfd107db1d1081ef18fe4b9167f/packages/react-refresh
這個 repo 算是有人把 dan 哥的東西還有其他東西全部弄起來,弄成 webpack 的 plugin https://github.com/pmmmwh/react-refresh-webpack-plugin 所以現在應該是要用這個
https://blog.usejournal.com/creating-a-react-app-from-scratch-f3c693b84658
Wenpack HMR https://zhuanlan.zhihu.com/p/30669007