开发总结:webpack

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 和开发环境 developmentmode: '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',// 打包的时候压缩htmlminify: {// 删除属性双引号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.mzph.cn/news/64983.shtml

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

相关文章

Segment Routing原理

以上内容均属原创&#xff0c;如有不详或错误&#xff0c;敬请指出。本文作者&#xff1a; 坏坏 本文链接&#xff1a; http://t.csdn.cn/2fUE5 版权声明&#xff1a; 本博客所有文章除特别声明外&#xff0c;如需转载&#xff0c;请联系作者注明出处并附带本文链接&#xf…

处理时延降低24倍,联通云粒数据引擎优化实践

*作者&#xff1a;郑扬勇&#xff0c;云粒星河数据中台产品负责人 云粒智慧科技有限公司成立于 2018 年 6 月&#xff0c;是中国联通集团混改以来成立的首家合资公司&#xff0c;是中国智慧城市数智化建设者。一直以来&#xff0c;云粒智慧以数字化、智能化、集约化产品为核心&…

CS144(2023 Spring)Lab 0:networking warmup(环境搭建 webget bytestream)

文章目录 前言其他笔记相关链接 1. Set up GNU/Linux on your computer2. Networking by hand3. Writing a network program using an OS stream socket3.1 Linux配置3.2 C规范3.3 Writing webget3.3.1 实现3.3.2 测试 4. An in-memory reliable byte stream4.1 思路分析4.2 代…

HTTPS安全通信和SSL Pinning

随着互联网的迅速发展&#xff0c;网络通信安全问题日益凸显。在这一背景下&#xff0c;HTTPS作为一种加密通信协议得到了广泛应用&#xff0c;以保障用户的数据隐私和信息安全。本文将介绍HTTPS的基本原理、发展历程&#xff0c;以及与之相关的中间人攻击和防护方法。 1. HTT…

Lesson4-1:OpenCV图像特征提取与描述---角点特征

学习目标 理解图像的特征知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff…

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

进程、操作系统

文章目录 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;1. 概述2. CPU 二、操作系统&#xff08;Operating System&#xff09;三、进程(process)/任务(task) 一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 1. 概述 分类 CPU 中央处…

气候变化下的DNDC模拟

DNDC&#xff08;Denitrification-Decomposition&#xff0c;反硝化-分解模型&#xff09;是目前国际上最为成功的模拟生物地球化学循环的模型之一&#xff0c;自开发以来&#xff0c;经过不断完善和改进&#xff0c;从模拟简单的农田生态系统发展成为可以模拟几乎所有陆地生态…

记一次Zip Slip任意文件写漏洞 以及一些参考文章

记一次Zip Slip任意文件写漏洞以及参考文章们 记一次Zip Slip任意文件写漏洞漏洞复现漏洞原理分析扩展延申 参考文章一&#xff1a;Java之解压流&#xff08;ZipInputStream&#xff09;参考文章二&#xff1a;Zip Slip VulnerabilityExploitable Application FlowAre you Vuln…

中级深入--day15

案例&#xff1a;使用BeautifuSoup4的爬虫 我们以腾讯社招页面来做演示&#xff1a;搜索 | 腾讯招聘 使用BeautifuSoup4解析器&#xff0c;将招聘网页上的职位名称、职位类别、招聘人数、工作地点、发布时间&#xff0c;以及每个职位详情的点击链接存储出来。 # bs4_tencent.p…

【Linux】线程安全-生产者消费者模型

文章目录 生产者消费者模型123规则应用场景优点忙闲不均生产者和消费者解耦支持高并发 代码模拟 生产者消费者模型 123规则 1个线程安全的队列&#xff1a;只要保证先进先出特性的数据结构都可以称为队列 这个队列要保证互斥&#xff08;就是保证当前只有一个线程对队列进行操…

交换机端口安全

文章目录 一、802.1X认证1. 定义和起源2. 认证方式本地认证远程集中认证 3. 端口接入控制方式基于端口认证基于MAC地址认证 二、端口隔离技术1. 隔离组2. 隔离原理3. 应用场景 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、802.1X认证 1. 定义和起源 8…

代码随想录算法训练营第39天 | ● 62.不同路径 ● 63. 不同路径II

文章目录 前言一、62.不同路径二、63.不同路径II总结 前言 动态规划 一、62.不同路径 深搜动态规划数论 深搜&#xff1a; 注意题目中说机器人每次只能向下或者向右移动一步&#xff0c;那么其实机器人走过的路径可以抽象为一棵二叉树&#xff0c;而叶子节点就是终点&#…

uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具的配置

目录 系列文章目录uniapp项目实战系列(1)&#xff1a;导入数据库&#xff0c;启动后端服务&#xff0c;开启代码托管&#xff08;点击跳转&#xff09;1.新建项目2.托管项目的操作&#xff1a;&#xff08;无勾选托管项目可无视&#xff09;3.项目编译预览3.1游览器编译3.2微信…

【数据结构与算法篇】手撕八大排序算法之交换排序

​&#x1f47b;内容专栏&#xff1a; 《数据结构与算法篇》 &#x1f428;本文概括&#xff1a;常见交换排序包括冒泡排序与快速排序&#xff0c;本篇讲述冒泡排序与快速排序的思想及实现、复杂度分析。 &#x1f43c;本文作者&#xff1a; 花 蝶 &#x1f438;发布时间&#…

Darshan日志分析

标头 darshan-parser 输出的开头显示了有关作业的总体信息的摘要。还可以使用–perf、–file或–total命令行选项生成其他作业级别摘要信息。 darshan log version&#xff1a;Darshan 日志文件的内部版本号。compression method&#xff1a;压缩方法。exe&#xff1a;生成日志…

skywalking agent监控java服务

一、前言 skywalking agent可以监控的服务类型有多种&#xff0c;python、go、java、nodejs服务等都可以监控&#xff0c;现在通过java服务来演示skywalking agent的使用&#xff0c;并且是使用容器的方式实现 二、部署skywalking agent监控 需要注意&#xff0c;skywalking…

Django报错:SystemCheckError: System check identified some issues解决办法

今天练习django自定义标签时&#xff0c;一开始在APPbook中写了自定义标签book_tags.py 测试成功&#xff0c;之后新建了一个APPblogs&#xff0c;测试在blogs中创建模板使用自定义标签&#xff0c;于是直接把book/templatetags包直接赋值到blogs目录里。在页面里加载自定义标…

K8s简介之什么是K8s

目录 1.概述 2.什么是容器引擎&#xff1f; 3.什么是容器 4.什么是容器编排&#xff1f; 5.容器编排工具 6.到底什么是K8s? 7.为什么市场推荐K8s 8.K8s架构 9.K8s组件 Pods API 服务器 调度器 控制器管理器 Etcd 节点 Kubelet Kube代理 Kubectl 1.概述 Kub…

通过这 5 项 ChatGPT 创新增强您的见解

为什么绝大多数的人还不会使用chatGPT来提高工作效能&#xff1f;根本原因就在还不会循序渐进的发问与chatGPT互动。本文总结了5个独特的chatGPT提示&#xff0c;可以帮助您更好地与Chat GPT进行交流&#xff0c;以获得更清晰的信息、额外的信息和见解。 澄清假设和限制 用5种提…