打包神器webpack的一键式操作

2023-10-27

创建基本的webpack4.x项目

  1. 运行npm init -y 快速初始化项目
  2. 在项目根目录创建src源代码目录和dist产品目录
  3. 在 src 目录下创建 index.html
  4. 使用 cnpm 安装 webpack ,运行cnpm i webpack webpack-cli -D
    • 如何安装 cnpm: 全局运行 npm i cnpm -g
  5. 注意:webpack 4.x 提供了 约定大于配置的概念;目的是为了尽量减少 配置文件的体积;
    • 默认约定了:
    • 打包的入口是src -> index.js
    • 打包的输出文件是dist -> main.js
    • 4.x 中 新增了 mode 选项(为必选项),可选的值为:developmentproduction;
// 向外暴露一个打包的配置对象
module.exports = {
    mode: "development"
}
//同样也可以进行入口文件和出口文件的配置
module.exports = {
    entry: "./src/index.js",
    output: {
        path: path.resolve(__dirname, "dist"),
        // path: path.resolve(process.cwd(), "dist"),
        filename: "static/js/[name].js", // string [name].[chunkhash:8].js
    }
}
  1. 配置html-webpack-plugin 插件
    导入在内存中自动生成index页面,并引入相应的js文件。
    npm i --save-dev html-webpack-plugin
    创建一个插件的实例对象
// 导入在内存中自动生成index页面的插件
const HtmlWebPackPlugin = require('html-webpack-plugin');
// 创建一个插件的实例对象
const htmlPlugin = new HtmlWebPackPlugin({
    // 源文件  根路径
    template: path.join(__dirname, "./src/index.html"),
    // 生成的内存中首页的名字
    filename: "index.html"
});
//或者在plugins中进行相应的配置
plugins: [
        new HtmlWebpackPlugin({
            title: 'My App',
            template: 'public/index.html'
        })
]
  1. 配置webpack-dev-server 插件
    实时打包编译,打包好的main.js放入了内存中,目录是不可见的。通过实时打包可以直接引入内存中的main.js文件,速度更快。
    npm install webpack-dev-server --save-dev
    在目录清单的scripts中进行配置
"dev": "webpack-dev-server --open Chrome --port 3000 --hot --host 127.0.0.1"

通过npm run dev进行启动

  1. 安装css-loader style-loadercss进行打包管理
    npm install --save-dev style-loader css-loader
 module: {
        rules: [{
                test: /\.css$/i,
                use: ['style-loader', 'css-loader'],
            }
}

在这种情况下压缩出来的样式是内联样式,不方便进行阅读。可以使用 mini-css-extract-plugincss单独提取出来。
npm install --save-dev mini-css-extract-plugin
rules中更改配置

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
module: {
        rules: [{
                test: /\.css$/i,
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'],
            }
            ]
},
plugins: [
        new MiniCssExtractPlugin({
            filename: 'static/css/[name].css'
        })
    ]
}
  1. 配置css预处理语言
    $ npm install less-loader less--save-dev
    rules中更改配置
module: {
        rules: [ {
                test: /\.less$/i,
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader'],
            }
            ]
}
  1. 安装autoprefixer postcss-loader 插件
    自动增加前缀,提高兼容性
    npm i -D postcss-loader
    npm i -D autoprefixer
    rules中的css配置最后增加postcss-loader
module: {
        rules: [{
                test: /\.css$/i,
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'],
            }
            ]
}

新建一个postcss.config.js文件

module.exports = {
    plugins: [
        require('autoprefixer')
    ]
}

package.json配置文件中增加一个字段

"browserslist": [
//兼容99.5%的浏览器
    "cover 99.5%",
    "last 8 version"
//最后8个版本
  ]
  1. 安装 file-loader插件
    对图片资源进行处理
    $ npm install file-loader --save-dev
    rules中更改配置
    module: {
        rules: [{
                test: /\.(png|jpe?g|gif)$/i,
                use: [{
                     loader: 'file-loader',
                     options: {
                         name: 'static/img/[name].[ext]',
                         publicPath: '/'
                     }
                }]
            }

在这种情况下,无论图片多大都会进行处理会影响浏览器的渲染速度。
通过安装url-loader插件实现对图片的选择性处理
$ npm install url-loader --save-dev
rules中更改配置

    module: {
        rules: [{
                test: /\.(png|jpe?g|gif)$/i,
                use: [{
                    loader: 'url-loader',
                    options: {
                        limit: 10000, //小于8kb的转换为base64编码并载入浏览器能够减少http请求数
                        name: 'static/img/[name].[ext]',
                        publicPath: '/'
                    }
                }]
            }
  1. 安装copy-webpack-plugin插件
    在有些时候我们会对一些静态资源进行原封不动的拷贝,手动的话太麻烦这时需要借助copy-webpack-plugin插件
    $ npm install copy-webpack-plugin --save-dev
    plugins中进行配置
const CopyPlugin = require('copy-webpack-plugin');
plugins: [
        new CopyPlugin([{
            from: path.resolve(process.cwd(), 'src/images/'),
            to: path.resolve(process.cwd(), 'dist/images')
        }])
    ]
  1. 安装babel插件

loader官方解释是文件预处理器,通俗点说就是webpack在处理静态文件的时候,需要使用 loader 来加载各种文件,比如: html文件需要使用html-loader ,css 需要使用css-loader 、 style-loader 等等。

npm install --save-dev babel-loader @babel/core @babel/preset-env

babel-loader,用来处理ES6语法,将其编译为浏览器可以执行的js语法。
rules中添加配置信息

 module: {
        rules: [
            {
                test: /\.js$/,
                // (不处理node_modules 和 bower_components下的js文件) 优化处理加快速度
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                    // presets设置的就是当前js的版本
                        presets: ['@babel/preset-env']
                        //plugins: [require('@babel/plugin-transform-object-rest-spread')] // plugin是需要的插件       
                    }
                }
            }
        ],
    }

可以使用 options 属性 来给loader传递选项:

  • cacheDirectory : 默认值是false. 当设置了这个值时,指定的目录将会用来缓冲loader的执行结果。之后的webpack 构建,将会尝试读取缓冲,来避免每次都执行时,产生高性能消耗的编译过程。如果提供的时空值或者传入true,那么loader使用默认的缓冲目录node_modules/.cache/babel-loader 。(如果没有找到node_modules将会往上一级查找)
    +babel-loader很慢!
  • 解决办法:
  • 要排除 node_modules,参考文档中的loaders 配置的exclude选项。
  • 你也可以通过使用 cacheDirectory 选项,将 babel-loader 提速至少两倍。 这会将转译的结果缓存到文件系统中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打包神器webpack的一键式操作 的相关文章

  • 区块链-区块链特点

    目录 https blog csdn net qq 40452317 article details 89646633 区块链 Blockchain 是一系列现有成熟技术的有机组合 它对账本进行分布式的有效记录 并且提供完善的脚本以支持不同
  • Qt 2D图形平面绘制

    Qt 2D图形平面绘制 一 图形视图框架 Graphics View Framework 二 实战 1 步骤 2 代码 三 参考 四 总结 一 图形视图框架 Graphics View Framework QGraphicsScene 场景
  • RocketMQ解析

    文章目录 1 单机版消息中心 2 分布式消息中心 2 1 问题与解决 2 1 1 消息丢失的问题 2 1 2 同步落盘怎么才能快 2 1 3 消息堆积的问题 2 1 4 定时消息的实现 2 1 5 顺序消息的实现 2 1 6 分布式消息的实
  • 软件测试进阶篇

    测试专栏 软件测试的基本概念 关于软件测试 作为一个测试人员 这些基础知识必不可少 关于测试用例 目录 一 按照测试对象来划分 1 界面 2 可靠性的测试 3 容错性 4 文档测试 5 兼容性测试 6 易用性测试 7 安装卸载测试 8 安全
  • Java string的基本用法

    Java string的基本用法 一 定义字符串与子串 定义 String e 空字符串 String E Hello 提取子串使用Substring方法 String E Hello String s E substring 0 4 s等
  • 《数字化转型》——企业持续有效增长的新引擎

    中国国民经济和社会发展第十四个五年规划和2035念远景目标纲要 明确指出 迎接数字时代 激活数据要素潜能 推动网络强国建设 加快建设数字经济 数字社会 数字政府 以数字化转型整体驱动生产方式 生活方式和治理方式变革 那么企业如何做 如何选型
  • Nginx通过/etc/init.d/nginx方式启动或停止服务

    Linux Nginx启动 停止 重启脚本 Nginx 启动 重启 停止脚本 第一步 先运行命令关闭nginx sudo kill cat usr local nginx logs nginx pid lt
  • Python时间序列预测大气二氧化碳浓度

    二氧化碳 CO2 和甲烷 CH4 等温室气体 GHG 会在大气中捕获热量 从而使我们的星球保持温暖 对生物物种友好 无论如何 燃烧化石燃料等人类活动会导致大量温室气体排放 从而过度提高地球的全球平均温度 因此 向可持续的全球经济转型势在必行

随机推荐

  • 极光笔记

    01 营销人 你是否饱受困扰 作为营销人的你 从996到007 每天从早忙到晚 但还是没办法把访客转化成客户 作为营销人的你 想通过APP通知 短信 邮件 公众号消息等方式 把所有能想到的营销方式 万箭齐发 结果却收效甚微 作为营销人的你
  • unity 设置animation不循环

    Unity中动画创建后 将会生成一个后缀名为 anim的文件 里面包含着动画内容 里面有一个属性 叫Loop Time 创建时它默认是勾选的 如果想去掉 可先找到你生成动画时创建的 anim文件 点击它 在右边Inspector栏里面找到L
  • MediaCodec、OpenGL、OpenSL/AudioTrack 实现一款简单的视频播放器

    概述 功能很简单 大致流程为 1 MediaCodec 解码视频文件得到 YUV PCM 数据 2 OpenGL 将 YUV 转为 RGB 并渲染到 Surface 上 3 OpenSL AudoTrack 获取 PCM 数据并播放 需要的
  • IDEA插件ASM Bytecode Outline

    IDEA插件ASM Bytecode Outline
  • Python之map()函数详解

    文章目录 一 map 函数简介 1 1 map 函数基本语法 1 2 map 函数 lambda表达式 1 3 map 函数输入多个可迭代对象iterable 1 4 查看返回的迭代器内容 二 map 函数示例 示例一 使用 map 函数操
  • CentOS 7.6镜像下载

    目前在国内使用最多的两个Linux发行版本一个是CentOS 另外一个是Ubuntu CentOS是一个可以重新分发的开源操作系统 也是企业Linux发行版的领头羊 官方目前发布的最新CentOS版本为CentOS 9 那么如何到下载旧版本
  • 一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

    1 题目描述 一个数组有 N 个元素 求连续子数组的最大和 例如 1 2 1 和最大的连续子数组为 2 1 其和为 3 输入描述 输入为两行 第一行一个整数n 1 lt n lt 100000 表示一共有n个元素 第二行为n个数 即每个元素
  • 从利用Arthas排查线上Fastjson问题到Java动态字节码技术(中)

    上一篇文章 中通过对一次线上事故的复盘 引出了福报厂的Arthas 一个建立在Java动态字节码技术之上的Java诊断工具 关于Arthas的使用方式就不赘述了 查看官方文档可以很快上手 玩法也特别多 上一篇中也仅仅只介绍了一种使用场景 即
  • c++ 建立链表并实现合并

    创建两个链表并实现两个链表相加 include
  • 《大型网站技术架构》序

    推荐序一 1 传统企业应用于大型网站应用的区别 传统的企业应用系统主要面对的技术挑战是处理复杂凌乱 干变万化的所谓业务逻辑 而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理 前者的挑战来自功能性需求 后者的挑战来自非功能性
  • 树-广度优先和深度优先搜索算法

    广度优先和深度优先搜索算法 本章主要讲述广度优先搜索算法BFS Breadth First Search 和深度优先算法DFS Depth First Search 广度优先 从起点开始由近及远进行广泛搜索 一般使用队列实现 深度优先 从起
  • Django表单系统

    目录 使用Form对象定义表单 Form对象的特性 表单字段的基类Field 常用的表单字段类型 基于Model定制的表单 ModelForm定义方式 表单中的常用方法 在Web站点中与后端服务进行交互 通常使用表单提交的方式 表单提交数据
  • 辐射神经场算法——NeRF算法详解

    辐射神经场算法 NeRF算法详解 辐射神经场算法 NeRF算法详解 1 Volume Rendering方法 2 NeRF中的积分公式推导 3 NeRF中应用的技巧 3 1 Positional Encoding 3 2 Hierarchi
  • (一)Wireshark 抓包解析出视频流ts

    这里简单介绍下Wireshark WS 解析出视频流的方法 其他过滤方法可以百度搜到更具体的 打开一个网络封包 一般是 pcap 或者 cap 抓包方式多样 若在嵌入式设备上面抓包 可以用工具TCPDUMP这个工具 若是android手机抓
  • settimeout、promise、async的执行顺序

    用一段代码来说明 async function async1 console log async1 start await async2 console log async1 end async function async2 consol
  • 生产制造业ERP管理系统

    什么是生产制造业ERP管理系 生产制造业ERP管理系统的建设本身作为企业在发展过程当中重要的战略布局建设 涉及到各个不同的企业部门 涵盖了研发 生产 物流 财务等等 需要对这些团队进行一把手的领导 而且在企业整体发展过程当中 可以做好综合性
  • MongoDB以及MongoVUE的安装和使用

    环境安装 MongoDB的安装 下载mongoDB MongoDB官网地址 个人百度云盘地址 版本为 mongodb win32 x86 64 2008plus ssl v3 0 latest signed msi 安装 到这里mongod
  • Spring源码------IoC源码分析详解

    Spring源码 IoC源码分析详解 目录 Spring源码 IoC源码分析详解 1 控制反转 IoC 2 Spring IoC 源码时序图 详细版 3 源码追踪 3 1详细版链接 3 2 个人总结浓缩版 方便记忆 4 总结 1 控制反转
  • Oracle练习

    一 找到员工表中工资最高的前三名 降序排序 select from emp order by sal desc rownum 伪列 系统自动生成的一列 用来表示行号 rownum是Oracle中特有的用来表示行号的 默认值 起始值是 1 在
  • 打包神器webpack的一键式操作

    创建基本的webpack4 x项目 运行npm init y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在 src 目录下创建 index html 使用 cnpm 安装 webpack 运行cnpm i webp