You need to put any JS and CSS files inside src, otherwise Webpack won’t see them.javascript
webpack只負責管理src文件夾下的內容,所以只能在src文件夾下建立子文件夾進行開發css
Only files inside public
can be used from public/index.html
.html
只有public文件夾下的內容可以被index.html引用java
須要安裝react-app-polyfill 纔可以使用es6+的語法node
When editing the
browserslist
config, you may notice that your changes don't get picked up right away. This is due to an issue in babel-loader not detecting the change in yourpackage.json
. An easy solution is to delete thenode_modules/.cache
folder and try again.react
要讓eslint支持ts,在vscode中須要以下配置:webpack
{ "eslint.validate": [ "javascript", "javascriptreact", { "language": "typescript", "autoFix": true }, { "language": "typescriptreact", "autoFix": true } ] }
擴展eslintios
override
對象{ "eslintConfig": { "extends": ["react-app", "shared-config"], "rules": { "additional-rule": "warn" }, "overrides": [ { "files": ["**/*.ts?(x)"], "rules": { "additional-typescript-only-rule": "warn" } } ] } }
vscodegit
在根目錄的.vscode文件夾中,添加launch.json文件es6
{ "version": "0.2.0", "configurations": [ { "name": "Chrome", "type": "chrome", "request": "launch", "url": "http://localhost:3000", "webRoot": "${workspaceRoot}/src", "sourceMapPathOverrides": { "webpack:///src/*": "${webRoot}/*" } } ] }
npm install --save husky lint-staged prettier
package.json 增長配置
+ "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }
接下來,咱們在 package.json
中添加一個 'lint-staged' 字段,例如:
"dependencies": { // ... }, + "lint-staged": { + "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [ + "prettier --single-quote --write", + "git add" + ] + }, "scripts": {
npm install --save source-map-explorer
package.json
中·"script"
添加
"scripts": { + "analyze": "source-map-explorer build/static/js/main.*", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test",
運行
npm run build npm run analyze
普通css文件 Button.css 模塊化 Button.module.css
咱們建議不要在 <AcceptButton>
和 <RejectButton>
組件中使用同一個 .Button
CSS 類,而是使用本身的 .Button
樣式建立一個 <Button>
組件,<AcceptButton>
和 <RejectButton>
均可以渲染(但 不是繼承)。
要在 Sass 文件之間共享變量,可使用 Sass 導入@import
語法。
.env 中配置SASS_PATH變量,用 :
分隔,例如 path1:path2:path3
,以指定sass加載目錄
經過 Autoprefixer 自動添加瀏覽器前綴
.b { /* autoprefixer: off */ transition: 1s; /* will not be prefixed */ } .c { /* autoprefixer: ignore next */ transition: 1s; /* will not be prefixed */ mask: url(image.png); /* will be prefixed */ }
將各瀏覽器元素樣式標準化
只須要在項目的app.css/index.css文件中引入
@import-normalize; /* bring in normalize.css styles */ /* rest of app styles */
直接在 JavaScript 模塊中 import 文件
要減小對服務器的請求數,導入小於 10,000 字節的圖片將返回 data URI 而不是路徑。 這適用於如下文件擴展名:bmp
,gif
,jpg
,jpeg
和 png
。
能夠直接導入 SVG 做爲 React 組件。
import { ReactComponent as Logo } from './logo.svg'; const App = () => ( <div> {/* Logo 是一個實際的 React 組件 */} <Logo /> </div> );
ReactComponent
導入名稱是特殊的,它告訴 Create React App 你想要一個渲染 SVG 的 React 組件,而不是它的文件名。
導入的svg組件能夠設置一個title prop來增長可訪問性
若是將文件放入 public
文件夾,Webpack 將 不會 處理它。相反,它將被複制到構建文件夾中。要引用 public
文件夾中的資源,須要使用名爲 PUBLIC_URL
的特殊變量。
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
只有 %PUBLIC_URL%
前綴才能訪問 public
文件夾中的文件。
使用缺點:
public
文件夾中的全部文件都不會進行後處理或壓縮。manifest.webmanifest
。pace.js
這樣的小腳本。<script>
標記。此項目設置支持經過 動態import()
進行代碼拆分。
使用react router進行代碼拆分
import export export default
能夠經過在根目錄的jsconfig.json或tsconfig.json中配置,若是文件不存在則能夠自行建立:
{ "compilerOptions": { "baseUrl": "src" }, "include": ["src"] }
你必須以 REACT_APP_
開頭建立自定義環境變量。除了 NODE_ENV
以外的任何其餘變量都將被忽略。更改任何環境變量都須要從新啓動正在運行的開發服務器。
將在 process.env
上爲你定義這些環境變量。例如,名爲 REACT_APP_SECRET_CODE
的環境變量將在你的JS中公開爲 process.env.REACT_APP_SECRET_CODE
。
你還能夠在 public/index.html
中以 REACT_APP_
開頭訪問環境變量。 例如:
<title>%REACT_APP_WEBSITE_NAME%</title>
.env
中添加開發環境變量要定義永久環境變量,請在項目的根目錄中建立名爲 .env
的文件:
REACT_APP_SECRET_CODE=abcdef
在 package.json
中添加 proxy
字段,例如:
"proxy": "http://localhost:4000",
沒有 text/html
accept 標頭的任何沒法識別的請求都將被重定向到指定的 proxy
(代理服務器)。
使用fetch時,在ie中須要使用react-app-polyfill