开发总结:webpack

news2025/1/20 3:55:13

webpack官网webpack | webpack 中文文档 | webpack 中文网

一、什么是webpack

webpack 可以看做是模块打包机,它所做的事情是:分析你的项目结构,找到JavaScript 模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Typescripe等),并将其打包为合适的格式以供浏览器使用

将所有的模块依赖关系打包成静态资源,可以实现以下功能:

1、代码转换(es6 转换成 es5,sass 和 less 转换成 css)

2、文件优化(压缩代码体积、合并文件等)

3、代码分割                    4、模块合并(按照功能,将多个模块合并成一个模块)

5、自动刷新(热更新)  6、代码校验(检验代码是否规范)

7、自动发布

二、 webpack基本配置

// 初始化
npm init -y


// 安装 webpack 和 webpack-cli 仅在开发环境中使用
npm install webpack webpack-cli -D


// webpack 打包命令
npx webpack

webpack 可以进行 0 配置,默认配置比较弱,可以手动配置webpack

默认配置文件的名字:webpack.config.js(webpack是node写的,因此可以写node的语法)

// path是node内置的核心模块,不需要安装
let path = require('path')

module.exports = {
    // 默认有2种模式:生产环境和开发环境
    mode: 'development',
    // 入口(要打包的资源)
    entry: './src/index.js',
    // 出口(打包后的位置和名字)
    output: {
        // 打包后的文件名
        filename: 'bundle.js',
        // 打包后的路径,路径必须是一个绝对路径
        // resolve可以将相对路径解析成绝对路径 
        // __dirname意思是在当前目录下解析生成一个dist2目录
        path: path.resolve(__dirname, 'dist2')
    }
}

三、解析webpack打包出的文件

改变下配置文件的名字 webpack.config.my.js,运行npx webpack会报错,因此需要更改运行命令

npx webpack --config webpack.config.my.js

简化和自定义打包命令:在package.json的脚本中自定义打包命令:

只需要 npm run build 就能实现项目的打包,同等效果

4、HTML插件

webpack内置的开发服务 实现静态服务:

npm install webpack-dev-server

通过执行以下命令,并不会真正的打包文件,只是生成内存中的打包

npx webpack-dev-server

 会生成一个访问地址

在package.json中配置运行脚本:通过运行 npm run dev 即可

通过访问地址进去的页面,默认是当前目录作为静态目录,非我们想要的目录,因为需要另外配置。

在webpack.config.js 配置开发服务器:

新建一个模板,将该模板作为脚本,生成在build文件夹下,这时候需要一个插件:html-webpack-plugin

自动生成一个html文件,并且引用相关的 js、css等文件的插件:html-webpack-plugin

安装:

npm install html-webpack-plugin -D

引入:

// path是node内置的核心模块,不需要安装
let path = require('path')
let HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    // 开发服务器的配置
    devServer: {
        // 配置端口号
        port: 3000,
        // 是否显示进度条
        progress: true,
        // 作为静态服务的文件夹
        contentBase: './build',
        // 是否压缩
        compress: true
    },
    // 默认有2种模式:生产环境 production 和开发环境 development
    mode: 'production',
    // 入口(要打包的资源)
    entry: './src/index.js',
    // 出口(打包后的位置和名字)
    output: {
        // 打包后的文件名 添加hash就是为了每次修改都是最新文件,防止加载缓存.只显示8位
        filename: 'bundle.[hash:8].js',
        // 打包后的路径,路径必须是一个绝对路径
        // resolve可以将相对路径解析成绝对路径 
        // __dirname意思是在当前目录下解析生成一个dist2目录
        path: path.resolve(__dirname, 'build')
    },
    // 数组 存放所有的webpack插件
    plugins: [
        new HtmlWebpackPlugin({
            // 模板
            template: './src/index.html',
            // 打包文件名字
            filename: 'index.html',
            // 打包的时候压缩html
            minify: {
                // 删除属性双引号
                removeAttributeQuotes: true,
                // 变成一行
                collapseWhitespace: true
            },
            // 给js文件加哈希戳
            hash: true
        })
    ]
}

5、样式处理1

loader 的作用:将源代码进行转化

loader 的特点:单一、功能明确

loader 的解析顺序:从右往左执行,从下往上执行

css-loader  处理css文件,负责解析 @import 语法、路径

style-loader  将 css 插入到 head 标签中

安装:

npm install css-loader style-loader -D

配置:

less-loader 将 less 语法转换为 css

安装:

npm install less less-loader -D

配置:

类似的样式处理器例如 sass node-sass sass-loader 和 stylus stylus-loader 的用法同上

6、样式处理2

抽离 css 插件:mini-css-extract-plugin

将样式抽离成单独的.css文件,并以link方法引入到 index.html 文件中 

插件都是类,插件的使用顺序没有先后

安装:

npm install mini-css-extract-plugin -D

配置:

不要直接插入到 head 标签中,而是使用插件抽离在专门的.css文件中

通过打包 npm run build 测试是否抽离成功:

自动添加浏览器前缀插件:autoprefixer

需要用到 postcss-loader

安装:

npm install postcss-loader autoprefixer -D

 配置:

需要添加 autoprefixer 配置文件:postcss.config.js

在webpack4+版本下需要在 package.json 配置:

  "browserslist": [
    "defaults",
    "not ie < 11",
    "last 2 versions",
    "> 1%",
    "iOS 7",
    "last 3 iOS versions"
  ]

打包查看是否配置成功:

虽然样式已经抽离成功,但是打包后的样式文件并没有压缩。

优化压缩 css 插件:optimize-css-assets-webpack-plugin

安装:

npm install optimize-css-assets-webpack-plugin -D

配置:

普通压缩:

使用cssnano配置规则:

打包查看 css 是否压缩成功:

优化压缩 js 插件:terser-webpack-plugin

用 terser-webpack-plugin 替换掉 uglifyjs-webpack-plugin 解决 uglifyjs 不支持es6语法问题

安装:

npm install terser-webpack-plugin -D

配置:

7、转换ES6语法

ES6 转 ES5 插件:babel-loader @babel/core @babel/preset-env

@babel/core 是 babel 的核心模块,调用transform 方法对语法进行转换

@babel/preset-env 将标准语法转换为低级语法

安装:

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

配置:

    module: {
        rules: [
            {
                test: /\.js$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            '@babel/preset-env'
                        ]
                    }
                }
            }
        ]
    }

打包后发现语法已经成功转换:

转换ES7高级语法插件:@babel/plugin-proposal-class-properties

安装:

npm install @babel/plugin-proposal-class-properties -D

配置:

    module: {
        rules: [
            {
                test: /\.js$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            '@babel/preset-env'
                        ],
                        plugins: ['@babel/plugin-proposal-class-properties']
                    }
                }
            }
        ]
    }

8、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】

❓ 剑指 Offer 15. 二进制中1的个数 难度&#xff1a;简单 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff…

非科班菜鸡算法学习记录 | 代码随想录算法训练营第53天|| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

1143. 最长公共子序列 知识点&#xff1a;动规 状态&#xff1a;不会 思路&#xff1a; 用dpij表示两个串中到i-1和j-1个字符结束的最长公共子序列长度&#xff08;不用特殊初始化&#xff09; class Solution { public:int longestCommonSubsequence(string text1, string …

操作系统的发展和分类

注意&#xff1a;每个阶段的主要优点都是解决了上个阶段的缺点 1.手工操作阶段 概括&#xff1a;一个用户在一段时间内独占全机&#xff0c;导致资源利用率极低&#xff0c;用户输入指令给机器&#xff0c;然后机器运行响应给用户。 2.批处理阶段 2.1单道批处理系统 优点&…

leetcode622-设计循环队列

本题重点&#xff1a; 1. 选择合适的数据结构 2. 针对选择的数据结构判断“空”和“满” 这两点是不分先后次序的&#xff0c;在思考时应该被综合起来。事实上&#xff0c;无论我们选择链表还是数组&#xff0c;最终都能实现题中描述的“循环队列”的功能&#xff0c;只不过…

数学建模-点评笔记 9月3日

1.摘要&#xff1a;关键方法和结论&#xff08;精炼的语言&#xff09;要说明&#xff0c;方法的合理性和意义也可以说明。 评委先通过摘要筛选&#xff08;第一轮&#xff09; 2.时间序列找异常值除了3西格玛还有针对时间序列更合适寻找的方法 3.模型的优缺点要写的详细一点…

编写一个这样的程序,满足五日均线,十日均线,二十日均线,六十天六日均线调头向上的选股代码

编写一个这样的程序&#xff0c;满足五日均线&#xff0c;十日均线&#xff0c;二十日均线&#xff0c;六十天六日均线调头向上的选股代码 以下是一个用C语言编写的程序&#xff0c;可以读取股票数据并筛选出满足条件的股票。程序使用了一个假设的股票数据文件格式&#xff0c…

将帅要避免五个方面的弱点:蛮干、怕死、好名、冲动、溺爱民众

将帅要避免五个方面的弱点&#xff1a;蛮干、怕死、好名、冲动、溺爱民众 【安志强趣讲《孙子兵法》第28讲】 【原文】 是故屈诸侯者以害&#xff0c;役诸侯者以业&#xff0c;趋诸侯者以利。 【注释】 趋&#xff1a;归附、依附。 【趣讲白话】 所以&#xff0c;用祸患威逼诸侯…

IDM2024Internet Download Manager下载器最新版本

IDM&#xff08;Internet Download Manager&#xff09;下载器主窗口的左侧是下载类别的分类&#xff0c;提供了分类功能来组织和管理文件。如果不需要它&#xff0c;可以删除“分类”窗口&#xff0c;并且在下载文件时不选择任何分类。 每个下载类别都有一个名称&#xff0c;…

ARM编程模型-常用指令集

一、ARM指令集 ARM是RISC架构&#xff0c;所有的指令长度都是32位&#xff0c;并且大多数指令都在一个单周期内执行。主要特点&#xff1a;指令是条件执行的&#xff0c;内存访问使用Load/store架构。 二、Thumb 指令集 Thumb是一个16位的指令集&#xff0c;是ARM指令集的功能…

Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】

Go实现LogAgent&#xff1a;海量日志收集系统【下篇】 0 前置文章 Go实现LogAgent&#xff1a;海量日志收集系统【上篇——LogAgent实现】 前面的章节我们已经完成了日志收集&#xff08;LogAgent&#xff09;&#xff0c;接下来我们需要将日志写入到kafka中&#xff0c;然后…

后端SpringBoot+前端Vue前后端分离的项目(一)

前言&#xff1a;后端使用SpringBoot框架&#xff0c;前端使用Vue框架&#xff0c;做一个前后端分离的小项目&#xff0c;需求&#xff1a;实现一个表格&#xff0c;具备新增、删除、修改的功能。 一、数据库表的设计 设计了一个merchandise表&#xff0c;id是编号&#xff0c…

基于Matlab利用IRM和RRTstar实现无人机路径规划(附上源码+数据+说明+报告+PPT)

无人机路径规划是无人机应用领域中的关键问题之一。本文提出了一种基于IRM&#xff08;Informed RRTstar Method&#xff09;和RRTstar&#xff08;Rapidly-exploring Random Tree star&#xff09;算法的无人机路径规划方法&#xff0c;并使用Matlab进行实现。该方法通过结合I…

【LeetCode-中等题】994. 腐烂的橘子

文章目录 题目方法一&#xff1a;bfs层序遍历 题目 该题值推荐用bfs&#xff0c;因为是一层一层的感染&#xff0c;而不是一条线走到底的那种&#xff0c;所以深度优先搜索不适合 方法一&#xff1a;bfs层序遍历 广度优先搜索&#xff0c;就是从起点出发&#xff0c;每次都尝…

无涯教程-JavaScript - VARP函数

VARP函数取代了Excel 2010中的VAR.P函数。 描述 该函数根据整个总体计算方差。 语法 VARP (number1,[number2],...)争论 Argument描述Required/OptionalNumber1The first number argument corresponding to a population.RequiredNumber2...Number arguments 2 to 255 cor…

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】

Go实现LogCollect&#xff1a;海量日志收集系统【上篇——LogAgent实现】 下篇&#xff1a;Go实现LogCollect&#xff1a;海量日志收集系统【下篇——开发LogTransfer】 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂…

Web of Science批量导出

目录 如何用Web of Science检索学术信息问题批量导出 Web of Science检索结果 如何用Web of Science检索学术信息 进入 Web of Science 检索页面&#xff1a; https://www.webofscience.com/wos/woscc/basic-search 根据需求填写过滤条件&#xff0c;点击 search 进入搜索详…

Stable Diffusion---Ai绘画-下载-入门-进阶(笔记整理)

前言 注&#xff1a;本文偏向于整理&#xff0c;都是跟着大佬们学的。 推荐两个b站up主&#xff0c;学完他们俩的东西基本就玩转SD为底的ai绘画&#xff1a; 秋葉aaaki&#xff0c;Nenly同学 1.首先SD主流的就是秋叶佬的Webui了&#xff0c;直接压缩包下载即可&#xff0c;下…

TCP三次握手四次挥手总结

目录 一、两种传输模式&#xff1a; 二、数据方向&#xff1a; 三、端口的作用&#xff1a; 四、端口类型&#xff1a; 五、三次握手&#xff1a; 六、四次断开 常见面试题 TCP&#xff08;Transfer control protocol&#xff09;传输控制协议 一、两种传输模式&#x…

计算机毕业设计 校园二手交易平台 Vue+SpringBoot+MySQL

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 项目内容…

PYTHON知识点学习-空语句和条件语句

空语句: 虽然条件满足时啥也不做,但是由于python对于语法格式,尤其是缩进和代码块的要求较高,所以如果啥都不写(只写注释)是不符合语法要求的. 报错原因:if后面需要带缩进块------>所以可以使用一个空语句pass进行占位 pass--空语句,无实际意义,啥都不想做时利用它进行占位 …