天天看點

如何搭建一個react項目(包含路由、權限)

init項目

1.建立項目檔案夾并進入

mkdir react-project

cd react-project

2.初始化npm

輸入npm init ,按照提示填寫項目基本資訊:

如何搭建一個react項目(包含路由、權限)

webpack

1.安裝webpack(webpack4.X)

npminstall--save-dev webpack webpack-cli -g

(--save-dev與--save的差別:

--save-dev表示隻是在編譯過程中所依賴的包,例如:webpack、sass-loader等 最後在package.json的devDependencies部分顯示

--save 表示編譯後在運作時還需要依賴的包,例如 react react-dom等 最後在package.json的dependencies部分顯示

-g 表示全局安裝)

2.建立webpack.config.js 檔案

如何搭建一個react項目(包含路由、權限)

這樣就完成了最簡單的webpack配置檔案。相應的我們需要在src目錄下建立一個index.js 檔案。

接下來在指令行輸入 webpack --config ./webpack.config.js就可以輸出dist檔案夾。

為了友善起見,通常我們會在package.json裡配置腳本指令。在scripts标簽下,添加一句"build": "webpack --config ./webpack.config.js"。這樣,我們就可以通過npm run build完成webpack打包。

3.配置開發應用伺服器

正常情況下,我們需要以應用伺服器打開我們的網頁,webpack-dev-server提供了一個簡單的web伺服器,并且能夠實時重新加載。首先需要安裝webpack-dev-server:

npm install -D webpack-dev-server

接下來,我們需要修改配置檔案,告訴開發伺服器,在哪裡尋找檔案:

修改webpack.dev.config.js,增加webpack-dev-server的配置

devServer:{  

     contentBase:path.join(__dirname,'./dist')

  }

這段配置告訴webpack-dev-server,在預設host和port下建立服務,并将contentBase目錄下的目錄,作為可通路檔案。 

接下來讓我們的伺服器跑起來,在package.json配置如下的指令腳本:

"scripts" : {

    "start": "webpack-dev-server --mode development --open",

    "build: "webpack --mode production --config ./webpack.config.js"

}

Babel & React

目前仍有浏覽器不相容ES6,同時react的jsx文法,也需要babel來将其轉化為能相容的js代碼:

npm install react react-dom react-router-dom -S

npm install babel-core babel-loader babel-preset-env babel-preset-react -D

安裝完之後,我們需要在webpack中配置使其生效。在webpack.config.js 的module中添加rules規則:

如何搭建一個react項目(包含路由、權限)

考慮到後期可能會有别的規則需求,例如antDesign的引入,我們将babel的配置提出來,在根目錄下建立檔案 .babelrc:

如何搭建一個react項目(包含路由、權限)

這樣我們就完成babel的相關配置,并且安裝了react相關依賴,可以書寫jsx文法了。

子產品熱替換(Hot Module Replacement)

1.安裝依賴

npm install [email protected] --save-dev

2. .babelrc 增加 react-hot-loader/babel

{

"presets":["es2015","react","stage-0"],

"plugins":["react-hot-loader/babel"]

}

3. webpack.dev.config.js入口增加react-hot-loader/patch

entry:[

'react-hot-loader/patch',

path.join(__dirname,'src/index.js')

]

4.根據需要,在src/index.js作相應修改,如:

如何搭建一個react項目(包含路由、權限)

檔案路徑優化

以前我們引用元件,或者頁面時候,都要寫相對路徑,如:../services/fetch,有時候可能會很複雜,webpack提供了一個别名配置,就是我們無論在哪個路徑下,引用都可以這樣寫:services/fetch

下面我們來配置下,修改webpack.dev.config.js,增加别名:

如何搭建一個react項目(包含路由、權限)

devtool優化

代碼哪裡寫錯了,浏覽器報錯隻報在build.js第幾行,這讓我們分析錯誤無從下手。

我們增加webpack配置devtool:

devtool:'inline-source-map';

錯誤資訊就能詳細展示啦

編譯css

npm install css-loader style-loader --save-dev

webpack.dev.config.js rules增加

 test:/\.css$/,  use:['style-loader','css-loader']

}

編譯圖檔

npm install --save-dev url-loader file-loader

webpack.dev.config.js rules增加

{   

 test:/\.(png|jpg|gif)$/,   

 use:[{        loader:'url-loader', 

  options:{     limit:8192    } 

}]

}

HtmlWebpackPlugin

這個插件,每次會自動把js插入到你的模闆index.html裡面去。

npm install html-webpack-plugin --save-dev

修改webpack.dev.config.js,增加plugin

var HtmlWebpackPlugin = require('html-webpack-plugin');

plugins:[

newHtmlWebpackPlugin({ 

filename:'index.html', 

template:path.join(__dirname,'src/index.html')

 })

]

加入 babel-plugin-transform-runtime 和 babel-polyfill

1.npm install --save-dev babel-plugin-transform-runtime

如何搭建一個react項目(包含路由、權限)

2.npm install --save-dev babel-polyfill

修改webpack兩個配置檔案:

如何搭建一個react項目(包含路由、權限)

內建PostCSS

他有很多很多的插件,比如Autoprefixer這個插件,可以自動給css屬性加浏覽器字首。

npm install--save-dev postcss-loader

npm install--save-dev postcss-cssnext

如何搭建一個react項目(包含路由、權限)

模拟AJAX資料之Mock.js