1. 程式人生 > >redux+react+webpack+熱載入+相容IE8(持續更新)

redux+react+webpack+熱載入+相容IE8(持續更新)

redux+react+webpack+熱載入+相容IE8

動機

(備忘錄,持續更新)專案需要支援到IE8,並且我是深度懶癌患者,於是選擇了高配帶有熱載入 功能的(相容了IE)環境。專案地址在下面。

剛剛接觸react+redux架構沒多久,用了大半天時間搭了redux+react+hot-middleware+supportIE8的環境。也分享給剛剛接觸、需要現成腳手架的朋友。基礎框架參照官方DEMO而來,僅對框架做了一些細微調整和IE相容。如果喜歡請點star(有動力更新嘛)。PS: src目錄下,是一個極簡的todo,你可以隨意刪除、替換為你的專案資源。

使用

安裝依賴

npm install

執行

npm start //localhost:3000

build

npm run build //build後index.html需要手動修改script路徑,這裡我有時間會修改為自動替換

已知問題(收集中)

1.開發環境中,IE8下不顯示介面,通過build打包後是沒問題的,不影響使用。如果有大神解決了這個問題,可以在下面留言Pull Request
2.收集中…

方案

下面貼出環境的就些依賴和配置,我會陸續添加註釋。package.json中不應該有註釋,所以請不要複製使用,可以從github上拉取

package.json

{
  "name": "redux-react-supportIE8-template",
  "version": "1.0.0",
  "description": "React support IE8",
  "main": "./src/index.js",
  "scripts": {
    "start": "node server.js",
    "build:webpack": "cross-env NODE_ENV=production webpack --config webpack.config.prod.js",
    "build": "npm run build:webpack"
, "test": "echo \"Error: no test specified\" && exit 1" }, "author": "iVan <[email protected]>", "dependencies": { "eventsource-polyfill": "^0.9.6", //support ie8 "fetch-ie8": "^1.4.0", //support ie8 "object-assign": "^4.0.1", "react": "^0.14.3", "react-dom": "^0.14.3", "react-redux": "^4.4.0", "redux": "^3.3.1", "redux-logger": "^2.6.1", "redux-thunk": "^2.0.1" }, "devDependencies": { "babel-loader": "^6.2.0", //babel對export default{}支援不好,不想寫成module.exports就安裝下面 "babel-plugin-add-module-exports": "^0.1.2", "babel-preset-es2015": "^6.3.13", //ES2015轉碼規則 "babel-preset-react": "^6.3.13", //react轉碼規則 "babel-preset-stage-0": "^6.3.13", //ES7不同階段語法提案的轉碼規則,一共有4個,選擇安裝一個 "es3ify-loader": "^0.1.0", "express": "^4.13.3", "cross-env": "^1.0.6", "webpack": "^1.12.9", "webpack-dev-middleware": "^1.4.0", "webpack-hot-middleware": "^2.6.0" } }

下面配置server:

var path = require('path');
var express = require('express');
var webpack = require('webpack');
var config = require('./webpack.config');

var app = express();
var compiler = webpack(config);
//通過localhost可以訪問專案資料夾下的所有檔案,等於動態為每個靜態檔案建立了路由
app.use(express.static(path.join(__dirname, '/')))
app.use(require('webpack-dev-middleware')(compiler, {
  noInfo: true,
  publicPath: config.output.publicPath
}));

app.use(require('webpack-hot-middleware')(compiler));

app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname, 'index.html'));
});

app.listen(3000, 'localhost', function(err) {
  if (err) {
    console.log(err);
    return;
  }
  console.log('Listening at http://localhost:3000');
});

webpack.config.js

webpack.config.js這個檔案npm start後在記憶體中構建的bundle.js
關於下面程式碼中webpack-hot-middleware/client?reload=true和其他引數請移步作者github,文件很詳細輕輕點這裡,記得回來

var path = require('path');
var webpack = require('webpack');

module.exports = {
  entry: [
    'eventsource-polyfill', //相容ie
    'webpack-hot-middleware/client?reload=true', //看上面
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  debug: true,
  devtool: 'source-map',
  plugins: [
      new webpack.optimize.OccurenceOrderPlugin(),
      new webpack.HotModuleReplacementPlugin(),
      new webpack.NoErrorsPlugin()
  ],
  module: {
    //loader自行新增
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loaders: ['babel-loader']
      }
    ],
    postLoaders: [
      {
        test: /\.js$/,
        loaders: ['es3ify-loader']
      }
    ]
  }

};

webpack.config.prod.js

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'source-map',
  entry: [
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': JSON.stringify('production')
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      compressor: {
        warnings: false
      }
    })
  ],
  module: {
    loaders: [{
      test: /\.js$/,
      exclude: /node_modules/,
      loaders: ['babel-loader']
    }],
    postLoaders: [
      {
        test: /\.js$/,
        loaders: ['es3ify-loader']
      }
    ]
  }
};

專案地址輕輕點這裡

相關推薦

redux+react+webpack+載入+相容IE8持續更新

redux+react+webpack+熱載入+相容IE8 動機 (備忘錄,持續更新)專案需要支援到IE8,並且我是深度懶癌患者,於是選擇了高配帶有熱載入 功能的(相容了IE)環境。專案地址在下面。 剛剛接觸react+redux架構沒多久,用了

瀏覽器的相容問題 不斷更新

1、清除浮動的相容性(低版本的瀏覽器不相容問題) .clearfix:after{   content:"";   clear:both;   display:block;   visibility:hidden;   h

React學習筆記持續更新

2.2頁面載入過程 1.資源載入過程:URL->DNS查詢->資源請求->瀏覽器解析 ①URL結構:http://www.hhh.com:80/getdata?pid=1#title[協議://域名:埠/路徑?引數#雜湊] ②DNS查詢:瀏覽器<--(ip)(域名)-->D

react-native android 除錯 遇到的坑持續更新

1.小米裝置除錯      檢視裝置是否正常連結  adb devices      連結正常  報錯:      FAILURE: Build failed with an exception.     * What went wrong:    Execution fa

React Native樣式總結持續更新

由於剛從android 原生轉過來做混合開發,習慣了什麼線性佈局,相對佈局等,對ReactNative 中的佈局還是一團黑,慢慢學習吧。每天總結一些自己遇到的。 發現一個兄弟已經總結了,就搬過來,原文

React Native之異常集中營持續更新...

這篇博文將會聚集在我學習React Native中遇到的所有問題,一方面是作為記錄,另一方面也給正在或是將要學習React Native的同學提供參考,少走一些彎路,多一點信心,持久學習。 一、環境搭建異常 1:sdk工具包 從標出來的地方可以看出,需

React Native 第一坑持續更新

環境搭建: https://reactnative.cn/docs/0.51/getting-started.html 1. 在同一個js檔案中,class定義的位置必須在引用之前,否則就會造成找不到class的問題 2. this的執行時可變的,但在箭頭函式中是固定的,

關於webpack的一些面試題緩慢更新

1.webpack與Grunt、Gulp這類打包工具有什麼不同 像Grunt、Gulp這類構建工具,打包的思路是: 遍歷原始檔 →

相容低版本IE瀏覽器的一些心得體會持續更新

前言: 近期工作中,突然被要求改別人的程式碼,其中有一項就是相容IE低版本瀏覽器,所以優雅降級吧。 我相信相容低版本IE是許多前端開發的噩夢,尤其是改別人寫的程式碼,更是痛不欲生。 本文將介紹一些本人相容時的一些心得體會,以及踩到的一些坑。 彙總: 1.IE瀏覽器不相容webp格式: 專案中有些圖片是用web

input輸入限制持續更新

pan only bmi pbo length 讀文本 num tom clipboard 1.只讀文本框內容 <!-- 在input裏添加屬性值 readonly --> <input type="text" value="" readonly&g

struts2學習筆記——常見報錯及解決方法匯總持續更新

允許 clip 之間 con ack 技術 ext tro height 操作環境:(1)Tomcat 7.0.72.0      (2)OS Name: Windows 7      (3)JVM Version: 1.8.0_25-b18      (4)e

ScvQ常用的網站持續更新...

sta https tac cto stack 開源中國 更新 title com GitHub:     https://github.com/ScvQ 開源中國:     http://git.oschina.net/ScvQ 博客園:     http://www.c

FPGA設計思想持續更新

流水線 切割 下一個 logs 學習 altera uart lte 問題 一、 流水線設計   將原本一個時鐘周期完成的較大的組合邏輯通過合理的切割後分由多個時鐘周期完成。該部分邏輯運行的時鐘頻率會有明顯對的提升,提高系統的性能用面積換速度   一個流水線設計需要4個步驟

python類相關總結持續更新

屬於 模塊 error pan 類成員 pro 相關 ror __str__ __init__   構造函數 __dict__   vars()函數,獲取命名空間裏面的名稱 __str__   str()函數,輸出成員相關信息的內容 __repr__   repl()函數,

Java學習軌跡【面向對象】持續更新

一個 調用構造 用法 可見 返回 java編譯 ted 條件 targe 其中部分內容為其他博主所作,侵刪 6月12日-7月每日更新 Java學習軌跡 一、面向對象 類和對象 1. new關鍵字所完成的事情 1)為對象開辟了新的內存空間 2)調用類的構造方法 3)返回生成對

git常用命令持續更新

git pull java com mit res mail dsa 切換 設置 1、設置用戶名和郵箱: git config --global user.name ""; git config --global user.email ""; git config --li

重構函數基本原則持續更新

一段 更新 設置 內部類 重構 修改 一個 變化 但是 1. 重構函數時一定要查清有哪些類調用了該函數 修改函數之前要明白函數每一段代碼的作用再做修改(所以體積小的函數好改啊),我就遇到過這樣的問題,修改函數內部有某個常量,但是該常量對於另外一個調用該函數的類來

七日成蝶課程一覽持續更新

七日成蝶 c語言 c++ thinkphp5 flashcs6 nginx php mysql openldap ssl apache tomcat本文列出了七日成蝶所有課程的鏈接,並會隨時更新,敬請關註。所有課程主頁:http://edu.51cto.com/lecturer/8403723.html七日成

python+mysql+flask創建一個微博應用持續更新

會話 pen 個人 數據庫管理 用戶角色 啟動 ini view 開啟 微博應用的結構: 用戶管理,包括登錄管理,會話,用戶角色,個人檔案及用戶頭像。 數據庫管理,包括數據庫遷移處理。 Web表單支持,包括字段檢驗和用於防止垃圾郵件的驗證碼功能。 大數據的分頁功能。 全文

tensorflow安裝調試總結持續更新

做的 更新 但我 secure 軟件 tar -o cal ipconfig 這段時間需要部署tensorflow到linux上,由於堡壘機不能連外網,所以pip、apt-get、wget、git統統不能用,然後就是各種調試了,下面整理了一些遇到的問題和解決方案,供大家參考