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
  • 更改代码自动刷新,路径转发
  • yarn add webpack-dev-server@2.9.7 --dev
  • 解决多版本共存问题

开始配置

安装webpack
// 创建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
// 执行
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'
  })
]

执行后会将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环境下,也可以进行打包
        }
      }
    }
  ]
}
// 安装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规则
{
  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

但是会出现路径的问题,需要添加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
  }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,164评论 7 35
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,121评论 0 21
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,693评论 7 110
  • 前言 搭一个脚手架真不是一件容易的事,之前为了学习webpack是怎么配置的选择自己搭建开发环境,折腾了好几天总算...
    大柚子08阅读 22,355评论 24 40
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,286评论 4 31