webpack3 配置详解

2023-11-15

今天详细的学习了webpack3 下面贴出我的主要配置代码给后来人一些参考

/**
 * Created by shanpengfei051 on 2018/1/3.
 */
const path = require('path')
const uglify = require('uglifyjs-webpack-plugin')  //JS压缩组件
const htmlPlugin= require('html-webpack-plugin')   //html打包组件
/*
 extract-text-webpack-plugin
这个插件就可以完美的解决我们提取CSS的需求,但是webpack官方其实并不建议这样作,
他们认为CSS就应该打包到JavasScript当中以减少http的请求数
 npm install --save-dev extract-text-webpack-plugin
*/
const extractTextPlugin = require('extract-text-webpack-plugin')
// 因为我们需要同步检查html模板,所以我们需要引入node的glob对象使用。在webpack.config.js文件头部引入glob。
const glob = require('glob')
// 引入purifycss-webpack
const PurifyCSSPlugin = require("purifycss-webpack");

// 模块化
const entry = require("./entry_webpack")
module.exports = {
    // 入口文件配置项
    // entry: {
    //     entry: './src/entry.js'
    // },
    entry: entry.path,
    // 出口文件配置项,webpack2.X之后支持多出口配置
    output:{
        // 打包的路径位置
        path: path.resolve(__dirname, 'dist'), // 获取项目的绝对路径
        // 打包的文件名称   [name]的意思是根据入口文件的名称,打包成相同的名称,有几个入口文件,就可以打包出几个文件。
        filename: '[name].js'
    },
    // 模块:例如解读CSS,图片如何转换压缩
    /*记得在loader使用时不需要用require引入,在plugins才需要使用require引入。

    * file-loader可以解析项目中的url引入(不仅限于css),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件
    *
    * url-loader  如果图片较多,会发很多http请求,会降低页面性能。这个问题可以通过url-loader解决。url-loader会将引入的图片编码,生成dataURl。
    * 相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了。当然,如果图片较大,编码会消耗性能。
    * 因此url-loader提供了一个limit参数,小于limit字节的文件会被转为DataURl,大于limit的还会使用file-loader进行copy。
    *
    * less 文件的打包和分离  和css相似   npm install --save-dev less    npm install --save-dev less-loader
    *
    * sass 文件的打包和分离  因为sass-loader依赖于node-sass,所以需要先安装node-sass
    * npm install --save-dev node-sass     npm install --save-dev sass-loader
    *
    * 自动处理CSS3属性前缀   npm install --save-dev postcss-loader autoprefixer   配置看官网
    *
    * 消除未使用的CSS    PurifyCSS   	npm i -D purifycss-webpack purify-css
    * -D代表的是–save-dev ,只是一个简写
    *
    *
    * */
    module: {
        rules: [
            {
                test: /\.css$/,
                // use: ['style-loader', 'css-loader']
                // npm install style-loader --save-dev    npm install --save-dev css-loader
                use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                }) // css打包的loader

            },{
                test: /\.(png|jpg|gif)/,  // 匹配图片文件后缀名称
                use: [{
                    /*url-loader封装了file-loader。url-loader不依赖于file-loader,即使用url-loader时,只需要安装url-loader即可,
                    不需要安装file-loader,因为url-loader内置了file-loader
                     url-loader工作分两种情况:
                     1.文件大小小于limit参数,url-loader将会把文件转为DataURL(Base64格式);

                     2.文件大小大于limit,url-loader会调用file-loader进行处理,参数也会直接传给file-loade
                    */
                    loader: 'url-loader',
                    options: {
                        limit: 8192,    // 把小于8192B的文件打成Base64的格式,写入JS
                        // outputPath: 'images/',
                        name: 'images/[name].[hash].[ext]',  // 放在文件夹的路径及命名
                        publicPath: '../'  // 路径上添加两个点指向正确路径
                    }
                }]  //指定使用的loader和loader的配置参数
            },{
                test: /\.scss$/,
                use: extractTextPlugin.extract({
                    use: [{
                        loader: "css-loader"
                    }, {
                        loader: "sass-loader"
                    }],
                    // use style-loader in development
                    fallback: "style-loader"
                })
                // use: [{
                //     loader: "style-loader"
                // },{
                //     loader: "css-loader"
                // },{
                //     loader: "sass-loader"
                // }]  // 需要注意的是loader的加载要有先后顺序
            },{
            /*
            * Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,
            * webpack可以把其不同的包整合在一起使用,对于每一个你需要的功能或拓展,
            * 你都需要安装单独的包
            * (用得最多的是解析ES6的babel-preset-es2015包和解析JSX的babel-preset-react包)
            * cnpm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
            *
             * */
                test:/\.(jsx|js)$/,
                use:{
                    loader:'babel-loader',
                    options:{
                        presets:[
                            "es2015","react"
                        ]
                    }
                },
                exclude:/node_modules/
            }
        ]
    },
    // 插件,用于生产模板和各项功能
    // 根据需要配置不同的功能插件
    plugins: [
        new uglify(),    // new一个 uglify对象
        new htmlPlugin({
            minify: {
                removeAttributeQuotes: true
            },// 对html进行压缩
            hash: true, // 加入hash,有效避免缓存JS
            template: './src/index.html' // 打包html模板路径和文件名称
        }),
        new extractTextPlugin("css/[name].[contenthash].css"), // 这里的css/index.css是分离后的路径位置
        new PurifyCSSPlugin({
            // Give paths to parse for rules. These should be absolute!
            paths: glob.sync(path.join(__dirname, 'src/*.html')),
        })
        /*
        * paths: 查找html模板,purifycss根据这个配置会遍历你的文件,查找哪些css被使用了
        * 配置好上边的代码,我们可以故意在css文件里写一些用不到的属性,然后用webpack打包,你会发现没用的CSS已经自动给你删除掉了
        * */
    ],
    // 配置webpack开发服务功能    服务和热更新 npm install webpack-dev-server --save-dev
    devServer: {
        // 设置基本的目录结构
        contentBase:path.resolve(__dirname, 'dist'),
        // 服务器的IP地址,可以使用IP也可以使用localhost
        host: 'localhost',
        // 服务端压缩是否开启
        compress: true,
        // 配置端口号
        port: 1717
    }
}
项目地址 https://github.com/PFShan/webpack3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack3 配置详解 的相关文章

随机推荐

  • 使用ggplot2包在R语言中抑制数据轴上的科学计数法

    使用ggplot2包在R语言中抑制数据轴上的科学计数法 在数据可视化领域 ggplot2是R语言中最流行和强大的包之一 它提供了丰富的功能和灵活性 使我们能够创建出美观 清晰的图形来展示数据 其中一个常见的问题是 当我们使用ggplot2绘
  • 【自然语言处理】隐马尔可夫模型【Ⅵ】精度问题

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 由于字数限制 分成六篇博客 自然语言处理 隐马尔可夫模型 马尔可夫模型 自然语言处理 隐马尔可夫模型 隐马尔科夫模型概述 自然语言处理 隐马尔可夫模型 估计问题 自然语言处理 隐马尔
  • 非递减排列和非递增排列的定义

    递增排列 1 2 3 4 5 6 7 8 递减排列 8 7 6 5 4 3 2 1 非递减排列 1 2 3 4 5 6 6 7 8 8 非递增排列 9 8 8 7 6 5 2 2 1
  • 小白学python-数据清洗

    数据清洗 赔率 公路堵车模型的概念及应用 主成分分析PCA 新的的特征组合 车辆数据描述 one hot编码会使特征值大量增加 维度变高视情况而定 Logistic回归 AUC 曲线下的面积 求取素数以及赔率的代码 import opera
  • web service概念、架构及相关知识

    一 WebService的定义 WebService有好几种定义 W3C组织对其定义 WebService是一个软件系统 为了支持跨网络的机器间互操作交互而设计 WebService通常被定义为一组模块化的API 我们可以通过网络进行调用
  • 太原理工大学19年Java试题复习笔计

    19年Java复习题 1 为使一个名为Example的public类成功编译 需至少满足以下哪个条件 2 0分 A Example类中必须定义一个正确的main函数 B Example类中必须定义在 Example java源文件中 C E
  • sklearn 神经网络

    sklearn 神经网络 url https blog csdn net luanpeng825485697 article details 79064657 url sklearn 神经网络 多层感知器的优点 可以学习得到非线性模型 使用
  • 雷军发布会刚结束,就能写出上万字原创文章!

    前言 看完雷军演讲会之后你有没有看到过很多文章 成千上万个字的原创文章 瞬间就出现了 这是一个一个字敲的吗 当然不是 是AI 话不多说直接上教程 把雷军的演讲整理到笔记中 可以是md格式 word格式等等 复制粘贴即可 打开网站 smart
  • vmware workstation14连网

    记录一下手残的过程 1 选择NAT形式的连接 2 在桌面的右上角有个圆圈 右击这个图标 会显示一个有线连接 默认是关闭的 3 所以设置成连接状态 4 右击有线连接 进行网络配置 5 所有都配置成自动获取
  • MybatisPlus多表连接查询

    mybatis plus作为mybatis的增强工具 它的出现极大的简化了开发中的数据库操作 但是长久以来 它的联表查询能力一直被大家所诟病 一旦遇到left join或right join的左右连接 你还是得老老实实的打开xml文件 手写
  • mybatis与数据库连接过程

    菜鸟发文 请大神多多指导 1 准被一个maven项目 2 先导入jar包 3 配置mybatis核心文件 4 把连接数据库的配置项抽离出来 5 编写实体类 6 编写接口 7 编写mapper映射文件 8 把相同SQL session 方法抽
  • TCP三次握手-backlog队列问题

    TCP三次握手 backlog队列问题 md 概述 之前有同事做压力测试时 发现无论如何都无法突破128并发的问题 经排查发现该服务器ACCEPT QUEUE队列都为128 限制了网络的并发 TCP三次握手 Linux内核协议栈为一个TCP
  • 初识-常见浏览器兼容性问题与解决方案

    浏览器兼容问题一 不同浏览器的标签默认的外补丁和内补丁不同 问题症状 随便写几个标签 不加样式控制的情况下 各自的margin 和padding差异较大 碰到频率 100 解决方案 CSS里 margin 0 padding 0 备注 这个
  • 前后端利用accessToken与refreshToken无感刷新

    项目初衷 以jwt 由header payload和signature组成 为例 用户登录成功 后端返回accessToken 前端保存 请求接口携带 一切都是水到渠成的 可是在acessToken失效时 你正好请求一次接口 接口就挂了 可
  • SpringBoot集成ShedLock分布式定时任务

    文章目录 前言 一 背景 二 ShedLock是什么 三 落地实现 1 1 引入依赖包 1 2 配置数据库连接信息 1 3 创建Mysql数据表 1 4 配置LockProvider 1 5 创建定时Job 四 结果分析 前言 一 背景 在
  • 【性能测试】Jmeter —— jmeter计数器

    jmeter计数器 如果需要引用的数据量较大 且要求不能重复或者需要递增 那么可以使用计数器来实现 如 新增功能 要求名称不能重复 1 新增计数器 计数器 允许用户创建一个在线程组之内都可以被引用的计数器 计数器允许用户配置一个起点 一个最
  • 《Go语言在微服务中的崛起:为什么Go是下一个后端之星?》

    博主猫头虎 带您进入 Golang 语言的新世界 博客首页 猫头虎的博客 面试题大全专栏 文章图文并茂 生动形象 简单易学 欢迎大家来踩踩 IDEA开发秘籍专栏 学会IDEA常用操作 工作效率翻倍 100天精通Golang 基础入门篇 学会
  • c语言 常量表达式,Constant expressions(常量表达)

    几种表达式被称为常量表达式 预处理器常量表达式 if 或 elif 后面的表达式必须扩展为 除赋值 增量 减量 函数调用或逗号之外的其他操作符 其参数是预处理常量表达式 整数常量 字符常量 特殊的预处理器操作员 defined 当在 if表
  • 面试题 : Top-k问题

    目录 简介 题目 示例 提示 开始解题 1 思路 2 解题代码 3 时间复杂度 4 运行结果 编辑 目前问题 真正的解法 1 以找前K个最大的元素为例 2 代码执行过程 时间复杂度的计算 3 画图演示代码执行过程 4 解题代码 两种解法的比
  • webpack3 配置详解

    今天详细的学习了webpack3 下面贴出我的主要配置代码给后来人一些参考 Created by shanpengfei051 on 2018 1 3 const path require path const uglify require