Create React App
是FaceBook的React團隊官方出的一個構建React
單頁面應用的腳手架工具。它自己集成了Webpack
,並配置了一系列內置的loader
和默認的npm的腳本,能夠很輕鬆的實現零配置就能夠快速開發React的應用。css
首先確保你電腦上安裝最新的html
# 全局安裝
npm install -g create-react-app
# 構建一個my-app的項目
npx create-react-app my-app
cd my-app
# 啓動編譯當前的React項目,並自動打開 http://localhost:3000/
npm start
以上命令執行完成後,則自動打開: http://localhost:3000/
node
若是你不能確保最新版本,能夠先嚐試卸載:
npm uninstall -g create-react-app
,而後再全局安裝。react
# npm init <initializer> is available in npm 6+ npm init react-app my-app
# yarn create is available in Yarn 0.25+
yarn create react-app my-app
項目的默認目錄:webpack
├── package.json ├── public # 這個是webpack的配置的靜態目錄 │ ├── favicon.ico │ ├── index.html # 默認是單頁面應用,這個是最終的html的基礎模板 │ └── manifest.json ├── src │ ├── App.css # App根組件的css │ ├── App.js # App組件代碼 │ ├── App.test.js │ ├── index.css # 啓動文件樣式 │ ├── index.js # 啓動的文件(開始執行的入口)!!!! │ ├── logo.svg │ └── serviceWorker.js └── yarn.lock
啓動開發web
npm start
# or
yarn start
啓動測試chrome
npm test
#or
yarn test
構建生產版本typescript
npm run build
#or
yarn build
解壓默認的webpack配置到配置文件中shell
npm run eject
sass
react-scripts@2.0.0 以上版本才適用。npm
要使用Sass必須首先安裝node-sass
$ npm install node-sass --save
$ # or
$ yarn add node-sass
安裝完以後,咱們就能夠直接把原來的CSS文件後綴直接改成 .scss
或者.sass
,而後組件中導入的文件再也不是 css文件而給我scss文件便可。
import React, {Component} from 'react'; import store from './Store/Index'; import {AddNumCreator, MinusNumCreator} from './Store/ActionCreaters'; import './App.scss'; class App extends Component { render() { return ( <div className="App"> <header className="App-header"> <h1>瀟灑</h1> </header> </div> ); } } export default App;
引入src中的scss文件 @import 'styles/_colors.scss';
引入node_modules
中的樣式: @import '~nprogress/nprogress';
~ 就表明: node_modules
導入CSS文件或者Sass文件的時候,能夠用一個變量接收一下返回值。那麼就能夠直接經過它來訪問CSS或者Sass中的內部樣式類了。好比:
.error {
background-color: red;
}
import React, { Component } from 'react'; import styles from './Button.module.css'; // Import css modules stylesheet as styles class Button extends Component { render() { // reference as a js object return <button className={styles.error}>Error Button</button>; } }
結果:
<!-- This button has red background --> <button class="Button_error_ax7yz">Error Button</button>
瞭解更多關於CSS模塊化
公共目錄裏面的內容不會被webpack進行處理,僅僅會拷貝到最終生成的項目的根目錄下。
在public
目錄中有個index.html
是單頁面應用的基本模板,全部react生成的代碼都會注入到此HTML中。因此此處能夠添加一些cdn腳本或者全局的html。
在公共目錄下,你能夠放字體文件、圖片、svg等文件,訪問這些文件最好添加 %PUBLIC_URL%
做爲根目錄。
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
巧妙的使用環境變量能夠幫咱們在項目中區分開生產環境仍是編譯環境,從而執行不一樣的代碼。
set "REACT_APP_NOT_SECRET_CODE=abcdef" && npm start
($env:REACT_APP_NOT_SECRET_CODE = "abcdef") -and (npm start)
REACT_APP_NOT_SECRET_CODE=abcdef npm start
.env
項目根目錄下建立.env
文件,文件內部添加 key=value
的配置能夠直接應用於項目的編譯中。
REACT_APP_NOT_SECRET_CODE=abcdef
Note: 若是建立自定義的環境變量必須以
REACT_APP_
開頭.
在項目中能夠直接用process.env.XXX
訪問咱們的自定義的環境變量。好比:
render() { return ( <div> <small>You are running this application in <b>{process.env.NODE_ENV}</b> mode.</small> <form> <input type="hidden" defaultValue={process.env.REACT_APP_NOT_SECRET_CODE} /> </form> </div> ); }
再好比:判斷是不是生產環境
if (process.env.NODE_ENV !== 'production') {
analytics.disable();
}
<title>%REACT_APP_WEBSITE_NAME%</title>
第一種方式:建立項目的時候直接配置好TypeScript
.
npx create-react-app my-app --typescript
#or
yarn create react-app my-app --typescript
第二種方式:爲現有的React項目添加TypeScript
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
# or
yarn add typescript @types/node @types/react @types/react-dom @types/jest
package.json
配置代理配置簡單代理,直接在package.json文件中添加proxy節點便可:
{
...
"proxy": "http://localhost:4000",
...
}
第一步:安裝 http-proxy-middleware
$ npm install http-proxy-middleware --save
$ # or
$ yarn add http-proxy-middleware
第二步:建立: src/setupProxy.js
添加以下內容:
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
app.use(proxy('/api', { target: 'http://localhost:5000/' }));
};
第一步: 首先安裝:Debugger for Chrome
插件。 第二步: 項目根目錄下建立 .vscode
文件夾。 第三步:建立launch.json
文件 文件內容:
{
"version": "0.2.0",
"configurations": [
{
"name": "Chrome",
"type": "chrome",
"request": "launch",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}/src",
"sourceMapPathOverrides": {
"webpack:///src/*": "${webRoot}/*"
}
}
]
}
此時能夠F5
直接啓動測試了。
有時候須要用HTTPS進行調試相關結構,因此須要把靜態站也作成HTTPS的,那麼如下配置:
配置HTTPS
的環境變量爲true
而後再用npm start
啓動dev server
就是HTTPS的了。
set HTTPS=true&&npm start
($env:HTTPS = "true") -and (npm start)
HTTPS=true npm start
瀏覽器可能有安全警告,不用管,直接測試,enjoy it!
Source map explorer
能夠幫助咱們分析代碼最終打包的bundles
的代碼來自哪裏,
安裝:
npm install --save source-map-explorer
#or
yarn add source-map-explorer
添加分析腳本到package.json
的scripts
中:
"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