webpack+react+antd 單頁面應用實例
React框架已經火了好長一段時間了,再不學就out了!
對React還沒有了解的同學可以看看我之前的一篇文章,可以快速簡單的認識一下React。React入門最好的實例-TodoList
自己從開始接觸react一竅不通,到慢慢的似懂非懂,通過各種途徑學習也有一陣了。學習過程中還會接觸到很多新的東西,比如ES6、webpack,過程艱辛誰人懂,見坑填坑慢慢來。今天把學習過程過濾了一下,只說項目實際需要用的東西,總結了一套能看到的東西,分享給大家,希望能讓讀者少踩一些坑!
本文看點
實際項目效果
:最終你只需要在本地啟一個服務,就能看到運行效果。webpack的配置
:項目實戰中常用的插件和配置方法。React用法
:React在MVC(模型Model-視圖View-控制器Controller)層面上主要扮演了視圖的作用。我們可以學習它在項目中到底該如何使用。React-router配置
:單頁面應用(SPA)離不開路由,我們可以學習在項目中React-router如何配置。ES6語法
:我們會用到一些在項目中常見的ES6語法。antd的使用
:螞蟻金服出的一款基於React的框架,我們可以學習如何去使用。
項目效果
項目代碼已經上傳至github,項目代碼github地址。大家把代碼下載下來之后,跟隨以下步驟即可在本地看到效果。
-
首先安裝node環境。
-
全局安裝webpack
npm install webpack -g
-
安裝項目依賴
npm install
-
開發模式,啟動本地服務
npm run dev
至這一步成功后,在瀏覽器輸入
localhost:8888
就能看到如下圖的效果了。 -
在build文件夾下打包
npm run build
webpack配置
基於React的項目配合webpack來打包管理最合適不過了。但是不學不知道,一學嚇一跳,webpack的學習TM復雜了,各種報錯,各種坑,就是webpack讓我在學習的過程中一度想要放棄。然而過來人告訴你,堅持就是勝利!
學會怎么配置webpack,是獨立管理項目的第一步。每個用webpack管理的項目都有一個webpack.config.js
文件,先來看看這個項目的webpack.config.js
文件:
'use strict'; var ExtractTextPlugin = require("extract-text-webpack-plugin"); //css單獨打包 var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin"); module.exports = { devtool: 'eval-source-map', entry: { main: './src/entry.js', //唯一入口文件 vendor: ['react'] //這里是依賴的庫文件配置,和CommonsChunkPlugin配合使用可以單獨打包 }, output: { path: './build', //打包后的文件存放的地方 filename: 'main.js', //打包后輸出文件的文件名 publicPath: 'http://localhost:8888/build/' //啟動本地服務后的根目錄 }, module: { loaders: [ { test: /\.js$/, loader: "jsx!babel", include: /src/}, { test: /\.css$/, loader: ExtractTextPlugin.extract("style", "css!postcss")}, { test: /\.scss$/, loader: ExtractTextPlugin.extract("style", "css!postcss!sass")}, { test: /\.(png|jpg|gif)$/, loader: 'url?limit=819200'} ] }, babel: { presets: ['es2015', 'stage-0', 'react'], plugins: ['transform-runtime', ['import', { libraryName: 'antd', style: 'css' }]] }, postcss: [ require('autoprefixer') //調用autoprefixer插件,css3自動補全 ], devServer: { // contentBase: './src/views' //本地服務器所加載的頁面所在的目錄 port: 8888, colors: true, //終端中輸出結果為彩色 historyApiFallback: true, //不跳轉 inline: true //實時刷新 }, plugins: [ new ExtractTextPlugin('main.css'), new CommonsChunkPlugin({ name: 'vendor', filename: