天天看點

從零開始搭建基于React的SPA應用

從零開始搭建基于React的SPA應用

前言

最近幾年,前端變化非常大,各種新架構應接不暇。從原始的html、css、js基礎開發,到現在前端的子產品化、工程化,旨在建構出易于維護的前端系統。目前,前端主要有三大架構:React、Vue、Angular。本文将學習如何從零開始搭建一個基于React的前端spa應用。

在開始學習之前,你需要安裝node.js,同時對以下知識有所了解:

1.原生js、css、html基礎;

2.npm包管理器基礎;

3.webpack4打包工具基礎;

4.es6标準規範;

5.less預處理器基礎;

以上知識點也是目前學習其他前端架構所必須了解的。如果你還未了解,建議你先了解之後再繼續下面的文章。

在文章中,會介紹基本的loader,如處理jsx js的babel-loader,處理css less的css-loader和less-loader,處理靜态資源檔案(png jpg gif等)的url-loader,以及做css相容處理的postcss-loader,然後會介紹一些插件,比如并行壓縮代碼插件,css壓縮插件。

yarn安裝

在本文學習,以及你以後實際開發工作中,可能涉及到很多包的安裝,強烈建議使用yarn來安裝包(用npm安裝包也是一樣的)。yarn是Facebook提供的替代npm的工具,可以加速 node子產品的下載下傳,跟npm相比,yarn的速度更快。

安裝yarn

npm install -g yarn

如果此處使用npm安裝太慢,可以切換鏡像,比如淘寶鏡像。

yarn的使用

初始化項目

yarn init

等價于npm init

添加新的依賴包

yarn add [package] 添加到dependencies,等價于npm install [package] –save

yarn add [package] --dev 添加到devDependencies,等價于npm install [package] --save-dev

更新依賴包

yarn upgrade [package]

移除依賴包

yarn remove [package]

安裝項目中全部依賴包

yarn 或 yarn install

webpack介紹

webpack是一個用于現代js 應用程式的靜态子產品打包工具。通過import 或 require方式可以導入子產品,export 或 exports可以導出子產品。打包時,webpack會找到項目的入口點,一直找通過import等方式導入的子產品,打包到一起,最後輸出html+css+js+png等靜态檔案。

從零開始搭建基于React的SPA應用

這是webpack官網的描述圖。從左上角的入口檔案開始,webpack一直尋找項目中所有的依賴,最終打包成右側的靜态資源。

目錄結構

項目目錄

從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用

項目搭建

現在,我們可以開始搭建我們的項目了。

先在你電腦的合适位置建立一個檔案夾share-demo(檔案名可以随便起),作為項目根目錄。然後在目前檔案夾下打開終端輸入指令yarn init初始化項目,一路回車,最後應該會在項目目錄下出現package.json檔案。package.json檔案裡,一般記錄了項目的配置資訊,包括名稱、版本、許可證等,也會記錄所需的各種子產品,包括生産依賴和開發依賴等。

在根目錄下建立index.html檔案、.babelrc檔案、src檔案夾、build檔案夾。

index.html檔案為打包後的html輸出模版,如下:

從零開始搭建基于React的SPA應用

.babelrc檔案包含babel的一些基礎配置,我們項目最終的檔案為:

從零開始搭建基于React的SPA應用

然後安裝webpack、webpacl-cli、webpack-merge。webpack-merge包是合并webpack檔案的,後面你會看到它的使用。

yarn add webpack webpack-merge –dev

再在build檔案夾下建立webpack.base.conf.js、webpack.dev.conf.js、webpack.prod.conf.js,src檔案夾下建立index.jsx、index.less。

index.jsx為webpack打包時的入口檔案,也即為整個項目的入口檔案。

三個webpack檔案的基礎内容為:

從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用

在這裡,我把webpack的配置檔案進行了拆分,實際項目中可拆可不拆。

webpack.base.conf.js為基礎的、項目所必須的一些配置,比如入口、出口的配置,基礎loader的配置,html模版輸出的配置等,這些配置不論是開發環境還是生産環境,都是必須的。

webpack.dev.conf.js為開發環境的配置,包含mode、devtool,同時還包括針對開發環境不同的loader配置,比如開發環境中的熱更新和熱替換配置。

webpack.prod.conf.js為測試環境的配置,它和webpack.dev.conf.js的差別就是,前者在實際的生産環境中使用,後者在開發環境中使用。同樣包含mode、devtool,同時還包括針對生産環境的loader配置,比如生産環境中對打包後的css檔案進行了分離和壓縮等。

你肯定在後兩個檔案裡發現了我們前文提到的webpack-merge。對,webpack-merge的使用就是如此的簡單。

現在webpack還不能跑,jsx、html檔案沒有處理,css、less、png、jpg等也未處理。

處理react的jsx檔案,我們需要使用到babel-loader,安裝babel相關的包:

@babel/core babel核心

@babel/preset-react 轉換jsx文法

@babel/preset-env 轉換es6文法

@babel/plugin-transform-tuntime 複用插件

@babel/runtime

babel-polyfill 轉換es6的新函數或對象,如promise,set,map等

使用yarn安裝以上包和babel-loader包。

yarn add @babel/core @babel/preset-react @babel/preset-env @babel/plugin-transform-runtime @babel/runtime babel-polyfill babel-loader --dev

還要處理html模版檔案,需要html-loader和html-webpack-plugin插件。

yarn add html-webpack-plugin html-loader –-dev

處理css、less檔案需要用到style-loader、css-loader、less-loader。

yarn add style-loader css-loader less-loader –-dev

處理png、jpg、gif等需要用到url-loader。

yarn add url-loader –-dev

之後,再分别修改webpack的三個檔案如下:

從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用

好了,現在我們的webpack能處理一些基礎檔案了,接下來終于要安裝react,、和react-dom了。

yarn add react react-dom –save--dev

然後修改src/index.jsx如下:

從零開始搭建基于React的SPA應用

src/index.less如下:

從零開始搭建基于React的SPA應用

到這裡你會發現,所有的工作好像都做完了,但怎麼讓我們的代碼運作起來呢?那就需要使用webpack-dev-server。

安裝webpack-dev-server。

yarn add webpack-dev-server --dev

在這裡,我也把webpack-dev-server的配置分離了出來。在build目錄下建立dev-server.js、ip-config.json、port.json檔案。

檔案依次如下:

從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用
從零開始搭建基于React的SPA應用

現在,萬事俱備,隻欠打包。

在package.json裡添加腳本,并看下package.json檔案:

從零開始搭建基于React的SPA應用

執行npm start指令,等同于npm run start指令,然後我們看下控制台輸出。

從零開始搭建基于React的SPA應用

當看到Compiled successfully說明我們的服務已經啟動成功。

此時浏覽器位址欄裡鍵入

https:localhost

:8080,你應該能看到以下頁面:

從零開始搭建基于React的SPA應用

至此,你已經基本完成了一個基礎的基于react的spa應用搭建。

但是,還有一些需要優化的部分。

優化

熱更新和熱替換

不知你是否注意到,在build/dev-server.js檔案裡有個參數hot。此參數為true時即可打開熱更新功能,但實際上現在當你修改index.jsx時,頁面并沒有重新整理,因為你還需要你在webpack配置檔案裡做一下修改。

編輯webpack.dev.conf.js檔案:

從零開始搭建基于React的SPA應用

此時再修改src/index.jsx,浏覽器頁面就會自動重新整理了。

使用postcss

簡單來說postcss就是做css轉換和相容處理的,比如自動添加css字首,還能轉換最新的css屬性。

安裝postcss-loader和autoprefixer。

yarn add postcss-loader autoprefixer –dev

繼續修改webpack.dev.conf.js和webpack.prod.conf.js檔案如下:

從零開始搭建基于React的SPA應用

這樣能保證當我們打包完畢後,html檔案中css的插入位置會自動添加适配浏覽器的字首,而無需我們手動操作。

分離和壓縮css

在實際的生産環境中,需要盡可能的壓縮css,同時需要把css内容從js檔案裡分離出來,以加快系統的啟動速度,提高性能。這裡需要用到mini-css-extract-plugin和optimize-css-assets-webpack-plugin,先安裝這兩個包。

yarn add mini-css-extract-plugin –dev

yarn add optimize-css-assets-webpack-plugin –dev

然後修改webpack.prod.conf.js檔案如下:

從零開始搭建基于React的SPA應用

注意,style-loader要删除,替換成MiniCssExtractPlugin方法。

還有很多其他的優化方式,後期可根據實際項目去配置和修改。

至此,項目的搭建工作已經基本完成,剩下的還需你繼續學習。

繼續閱讀