React的Webpack配置

Yarn安裝

npm i yarn -g
image.png

webpack

  • 使用版本3.10.0
  • yarn add webpack@3.10.0 --dev

需要處理的文件里類型

  • HTML -> html-webpack-plugin
  • 腳本 -> babel + babel-preset-react
  • 樣式 -> css-loader + sass-loader
  • 圖片/字體 -> url-loader + file-loader

webpack常用模塊

  • html-webpack-plugin html單獨打包成文件
  • extract-text-webpack-plugin 樣式打包成單獨文件
  • CommonsChunkPlugin 提出通用模塊

webpack-dev-server

  • 為webpack項目提供web服務
  • 使用2.9.7
  • 更改代碼自動刷新,路徑轉(zhuǎn)發(fā)
  • yarn add webpack-dev-server@2.9.7 --dev
  • 解決多版本共存問題

開始配置

安裝webpack
// 創(chuàng)建git 
git init
// 初始化項目
yarn init
// 安裝webpack
yarn add webpack@3.10.0 --dev
const path = require('path');
module.exports = {
  entry: './src/app.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'app.js'
  }
};

在項目中新建一個webpack.config.js,然后新建src/app.js

image.png
// 執(zhí)行
node_modules/.bin/webpack

這個文件就被打包了

配置HTML
// 安裝
yarn add html-webpack-plugin@2.30.1 --dev

新建一個src/index.html

// 引入
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 寫插件
plugins: [
  new HtmlWebpackPlugin({
      template: './src/index.html'
  })
]

執(zhí)行后會將app.js自動引入進html中

處理腳本
// 安裝 解析ES6
yarn add babel-loader@7.1.2 babel-core@6.26.0 babel-preset-env@1.6.1 --dev
// 配置loader
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules)/,  //對這個不做處理
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['env']
        }
      }
    }
  ]
}
React的配置
// 安裝解析jsx的babel包
yarn add babel-preset-react@6.24.1 --dev
module: {
  rules: [
    {
      test: /\.jsx$/,
      exclude: /(node_modules)/,  //對這個不做處理
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['env','react']    //在react環(huán)境下,也可以進行打包
        }
      }
    }
  ]
}
// 安裝React
yarn add react@16.2.0 react-dom@16.2.0

此時做一個實驗將app.js -> app.jsx,然后修改入口文件

// app.jsx
import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

最后解析成了ES5的形式,可以解析jsx了

解析CSS
// 安裝
yarn add style-loader@0.19.1 css-loader@0.28.8 --dev
// 添加rules規(guī)則
{
  test: /\.css$/,
  use: [ 'style-loader', 'css-loader' ]
}

此時css就被成功引入了,但是css被解析成js的形式,因此我們要將css單獨拿出來,需要用到ExtractTextWebpackPlugin

// 安裝
yarn add extract-text-webpack-plugin@3.0.2 --dev
// 引入插件
const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin')
{
  test: /\.css$/,
  use: ExtractTextWebpackPlugin.extract({
    fallback: "style-loader",
    use: "css-loader"
  })
}
// new
new ExtractTextWebpackPlugin("index.css")
解析scss

一定要安裝node-sass

// 安裝 scss-loader
yarn add sass-loader@6.0.6 node-sass@4.7.2 --dev
{
  test: /\.scss$/,
  use: ExtractTextWebpackPlugin.extract({
    fallback: 'style-loader',
    use: ['css-loader', 'sass-loader']
  })
}
處理圖片
// 安裝
yarn add file-loader@1.1.6 url-loader@0.6.2 --dev
{
  test: /\.(png|jpg|gif)$/,
  use: [
    {
      loader: 'url-loader',
      options: {
        limit: 8192
      }
    }
  ]
}
引入字體圖標
// 安裝
yarn add font-awesome
{
  test: /\.(woff|woff2|eot|ttf|otf|svg)$/,
  use: [
    {
      loader: 'url-loader',
      options: {
        limit: 8192
      }
    }
  ]
}
提取公共模塊
// 提出公共模塊
new webpack.optimize.CommonsChunkPlugin({
  name: 'common',   // 公共模塊名
  filename: 'js/base.js'  // 打包的目錄
})
webpack-dev-server
// 安裝
yarn add webpack-dev-server@2.9.7 --dev

在plugin下加上

devServer: {
    
}
// 運行
node_modules/.bin/webpack-dev-server

但是會出現(xiàn)路徑的問題,需要添加publicPath


image.png
加腳本
// package.json
"scripts" : {
  "dev" : "node_modules/.bin/webpack-dev-server",
  "dist" : "node_modules/.bin/webpack"
}

最終

const path = require('path');
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
module.exports = {
  entry: './src/app.jsx',
  output: {
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/dist/',
    filename: 'js/app.js'
  },
  module: {
    rules: [
      {
        test: /\.jsx$/,
        exclude: /(node_modules)/,  //對這個不做處理
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['env','react']
          }
        }
      },
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: "css-loader"
        })
      },
      {
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['css-loader', 'sass-loader']
        })
      },
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
              name: 'resource/[name].[ext]'   // 路徑
            }
          }
        ]
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf|svg)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
              name: 'resource/[name].[ext]'   // 路徑
            }
          }
        ]
      },
      
    ]
  },
  plugins: [
    // 處理HTML文件
    new HtmlWebpackPlugin({
        template: './src/index.html'
    }),
    // 獨立css文件
    new ExtractTextPlugin("css/[name].css"),
    // 提出公共模塊
    new webpack.optimize.CommonsChunkPlugin({
      name: 'common',   // 公共模塊名
      filename: 'js/base.js'  // 打包的目錄
    })
  ],
  devServer: {
    port: 8086
  }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窖铡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坊谁,更是在濱河造成了極大的恐慌费彼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件口芍,死亡現(xiàn)場離奇詭異箍铲,居然都是意外死亡,警方通過查閱死者的電腦和手機鬓椭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門颠猴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人小染,你說我怎么就攤上這事翘瓮。” “怎么了裤翩?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵资盅,是天一觀的道長。 經(jīng)常有香客問我踊赠,道長呵扛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任筐带,我火速辦了婚禮今穿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伦籍。我一直安慰自己蓝晒,他們只是感情好腮出,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拔创,像睡著了一般利诺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剩燥,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天慢逾,我揣著相機與錄音,去河邊找鬼灭红。 笑死侣滩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的变擒。 我是一名探鬼主播君珠,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娇斑!你這毒婦竟也來了策添?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤毫缆,失蹤者是張志新(化名)和其女友劉穎唯竹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苦丁,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡浸颓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旺拉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片产上。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛾狗,靈堂內(nèi)的尸體忽然破棺而出晋涣,到底是詐尸還是另有隱情,我是刑警寧澤沉桌,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布谢鹊,位于F島的核電站,受9級特大地震影響蒲牧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赌莺,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一冰抢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艘狭,春花似錦挎扰、人聲如沸翠订。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尽超。三九已至,卻和暖如春梧躺,著一層夾襖步出監(jiān)牢的瞬間似谁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工掠哥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巩踏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓续搀,卻偏偏與公主長得像塞琼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子禁舷,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺彪杉,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,164評論 7 35
  • 版權(quán)聲明:本文為博主原創(chuàng)文章构哺,未經(jīng)博主允許不得轉(zhuǎn)載。 webpack介紹和使用 一战坤、webpack介紹 1曙强、由來 ...
    it筱竹閱讀 11,121評論 0 21
  • GitChat技術(shù)雜談 前言 本文較長,為了節(jié)省你的閱讀時間途茫,在文前列寫作思路如下: 什么是 webpack碟嘴,它要...
    蕭玄辭閱讀 12,693評論 7 110
  • 前言 搭一個腳手架真不是一件容易的事囊卜,之前為了學習webpack是怎么配置的選擇自己搭建開發(fā)環(huán)境娜扇,折騰了好幾天總算...
    大柚子08閱讀 22,355評論 24 40
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,286評論 4 31