当前位置: 首页 > news >正文

Webpack 复习小结

nodejs学习参考
node常用命令:
node xxx.js
执行js文件
npm init -y
初始化package.json
npm i 软件包名
下载软件包到本地
npm i 软件包名 -g
下载软件包到全局
npm uni 软件包名
删除软件包

系统优化CDN使用

CDN for free

需求:开发模式使用本地第三方库,生产模式下使用CDN加载引用
步骤:
1.在index.html文件中引入第三方CDN地址,并用模板语法判断
index.html

...
<% if(htmlWebpackPlugin.options.useCDN){ %>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.min.js"></script>
<% } %>
...

webpack.config.js

plugins: [new HtmlWebpackPlugin({template: './public/index.html', // html模板文件filename: './index.html', // html输出文件名useCDN: process.env.NODE_ENV === 'production',favicon: './public/favorite.png'}),
],

2.配置webpack.config.js中externals外部扩展选项(防止某些import的包被打包)

/*生产模式下,排除掉 使用CDN引入加载的资源*/
if (process.env.NODE_ENV === 'production') {config.externals = {//key : import from 语句后面的字符串//value: 留在原地的全局变量(最好和CDN在全局暴露的变量一致)'axios': 'axios'}
}

多页面打包

未成功加载

开发环境调错

问题:代码被压缩和混淆,无法正确定位源代码位置(行数和列数)
source map :可以准确追踪error和warning在原始代码中的位置
设置:webpack.config.js配置devtool选项

/*开发模式下使用devtool = inline-source-map,便于查找错误*/
if (process.env.NODE_ENV === 'development')config.devtool = 'inline-source-map'

inline-source-map选项:把源码的位置信息一起打包在js文件内
注意:source-map仅适用于开发环境,不要在生产环境使用(防止被轻易查看源码位置)

打包模式

打包模式:告知webpack使用响应的内置优化
开发模式:development 调试代码;实施加载;模块热替换等;适用于本地开发
生产模式:production 压缩代码;资源优化;更轻量;适用于打包上线

设置方式1:
package.json

"build": "webpack --mode=production",
"dev": "webpack serve --open --mode=development"

设置方式2:
webpack.config.js

const config = {
//mode: 'development',
mode: 'production',
}

命令行设置的优先级高于配置文件中的,推荐使用命令行设置

应用

需求:在开发模式下用style-loader内嵌,加载更快,再生产模式下提取css代码
借助cross-env(跨平台通用)包命令,设置参数区分环境
步骤:

  1. 下载 cross-env软件包到当前项目
    npm i cross-env --save-dev
  2. 配置自定义命令,传入参数名和值(会绑定到process.env对象下)
"build": "cross-env NODE_ENV=production webpack --mode=production",
"dev": "cross-env NODE_ENV=development webpack serve --open --mode=development"
  1. webpack.config.js区分不同环境使用不同配置
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
/*css 分别打包*/
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
/*css 代码压缩插件*/
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const webpack = require('webpack')const config = {// mode: 'development',entry: {index: './src/main.js',// print: './src/print.js',},// devtool: 'inline-source-map',devServer: {/*默认以 public/index.html ,可以将dist目录启动为服务*/// static: './dist',//启动服务后自动弹出页面// open: true},module: {rules: [{test: /\.css$/i,// use: [MiniCssExtractPlugin.loader, "css-loader"],/*开发模式下, 内嵌css样式,让热替换更快生产模式下提取css代码,让浏览器缓存 并行下载js和css文件*/use: [process.env.NODE_ENV === 'development' ? 'style-loader' : MiniCssExtractPlugin.loader, "css-loader"],},{test: /\.less$/i,use: [// compiles Less to CSSprocess.env.NODE_ENV === 'development' ? 'style-loader' : MiniCssExtractPlugin.loader,'css-loader','less-loader',],},],},plugins: [new HtmlWebpackPlugin({template: './public/index.html', // html模板文件filename: './index.html', // html输出文件名useCDN: process.env.NODE_ENV === 'production',favicon: './public/favorite.png'}),new MiniCssExtractPlugin({}),//允许在 编译时 将前端代码中的变量替换为其他值或表达式new webpack.DefinePlugin({// 定义...'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),}),],output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist'),clean: true,},optimization: {runtimeChunk: 'single',minimizer: [// 在 webpack@5 中,你可以使用 `...` 语法来扩展现有的 minimizer(即 `terser-webpack-plugin`),将下一行取消注释`...`,new CssMinimizerPlugin(),],},/*配置别名变量*/resolve: {alias: {'@': path.join(__dirname, 'src')}}
}/*开发模式下使用devtool = inline-source-map,便于查找错误*/
if (process.env.NODE_ENV === 'development')config.devtool = 'inline-source-map'/*生产模式下,排除掉 使用CDN引入加载的资源*/
if (process.env.NODE_ENV === 'production') {config.externals = {//key : import from 语句后面的字符串//value: 留在原地的全局变量(最好和CDN在全局暴露的变量一致)'axios': 'axios'}
}
module.exports = config

相关文章:

Webpack 复习小结

nodejs学习参考 node常用命令&#xff1a; node xxx.js 执行js文件 npm init -y 初始化package.json npm i 软件包名 下载软件包到本地 npm i 软件包名 -g 下载软件包到全局 npm uni 软件包名 删除软件包 系统优化CDN使用 CDN for free 需求&#xff1a;开发模式使用本地第三…...

Laravel chunk和chunkById的坑

在编写定时任务脚本的时候&#xff0c;经常会用到chunk和chunkById的API。 一、前言 数据库引擎为innodb。 表结构简述&#xff0c;只列出了本文用到的字段。 字段类型注释idint(11)IDtypeint(11)类型mark_timeint(10)标注时间&#xff08;时间戳&#xff09; 索引&#x…...

从零开始学习 Java:简单易懂的入门指南之泛型及set集合(二十二)

泛型及set集合扩展 1.泛型1.1泛型概述 2.Set集合2.1Set集合概述和特点【应用】2.2Set集合的使用【应用】 3.TreeSet集合3.1TreeSet集合概述和特点【应用】3.2TreeSet集合基本使用【应用】3.3自然排序Comparable的使用【应用】3.4比较器排序Comparator的使用【应用】3.5两种比较…...

JVM----GC(垃圾回收)详解

一、Automatic Garbage Collection&#xff08;垃圾回收&#xff09;简介 Automatic Garbage Collection &#xff08;自动垃圾回收&#xff09;是JVM的一个特性&#xff0c;JVM会启动相关的线程&#xff0c;该线程会轮训检查heap memeory&#xff0c;并确定哪些是未被引用的(…...

数据库的三个范式

数据库的三个范式是关系数据库设计中的一组规范&#xff0c;用于确保数据的有效性和一致性。这三个范式分别是&#xff1a; 第一范式&#xff08;1NF&#xff09;&#xff1a;要求数据库表中的每一列都是不可分割的原子值。换句话说&#xff0c;每个表中的每个字段不能包含多个…...

谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行

环境&#xff1a; Win10 专业版 谷歌浏览器 版本 116.0.5845.141&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; L盾加密终端 问题描述&#xff1a; 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行&#xff0c;要全部结束谷歌浏览器进程&…...

Java EE 突击 15 - Spring Boot 统一功能处理

Spring Boot 统一功能处理 一 . 统一功能的处理1.1 初级阶段 : 不断重复1.2 中级阶段 : 集成方法1.3 高级阶段 : Spring AOP1.4 超高级阶段 : Spring 拦截器准备工作实现拦截器自定义拦截器将自定义拦截器加入到系统配置 拦截器实现原理扩展 : 统一访问前缀添加 二 . 统一异常的…...

JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白

问题1: JasperReport打印出来的整个pdf文件为空白文件&#xff1b; 问题2&#xff1a;JasperReport定义变量后打印PDF变量为null&#xff1b; 问题1原因是因为缺少数据源JRDataSource JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印…...

Python 及 Pycharm 的安装 2023.8

Python 及 PyCharm 的安装 仅适用于 Windows 系统&#xff01; 视频教程&#xff1a;【Python及Pycharm的安装 2023.8】 https://www.bilibili.com/video/BV1A34y1T7Gu 文章目录 Python 及 PyCharm 的安装安装 Python安装 PyCharmHi, PyCharmPyCharm 汉化 安装 Python 进入 …...

java中的线程中断

java中的线程中断 1、线程中断 即 线程的取消/关闭的机制2、线程对中断interrupt()的反应2.1、RUNNABLE&#xff1a;线程在运行或具备运行条件只是在等待操作系统调度2.2、WAITING/TIMED_WAITING&#xff1a;线程在等待某个条件或超时2.3、BLOCKED&#xff1a;线程在等待锁&…...

【跟小嘉学 Rust 编程】二十三、Cargo 使用指南

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

R Removing package报错(as ‘lib’ is unspecified)

remove.packages(ggpubr) Removing package from ‘/Library/Frameworks/R.framework/Versions/4.0/Resources/library’ (as ‘lib’ is unspecified) 解决办法&#xff1a; > .libPaths() [1] "/Library/Frameworks/R.framework/Versions/4.0/Resources/library&qu…...

金融信创,软件规划需关注自主安全及生态建设

软件信创化&#xff0c;就是信息技术软件应用创新发展的意思&#xff08;简称为“信创”&#xff09;。 相信在中国&#xff0c;企业对于“信创化”这个概念并不陌生。「国强则民强」&#xff0c;今年来中国经济的快速发展&#xff0c;受到了各大欧美强国的“卡脖子”操作的影…...

无重叠区间【贪心算法】

无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 class Solution {public int eraseOverlapIntervals(int[][] intervals) {//先排序&#xff0c;按照左边界升序,注…...

nlp系列(7)实体识别(Bert)pytorch

模型介绍 本项目是使用Bert模型来进行文本的实体识别。 Bert模型介绍可以查看这篇文章&#xff1a;nlp系列&#xff08;2&#xff09;文本分类&#xff08;Bert&#xff09;pytorch_bert文本分类_牧子川的博客-CSDN博客 模型结构 Bert模型的模型结构&#xff1a; 数据介绍 …...

Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)

先把官网文档摆在这&#xff0c;后面会用到的 [uniapp官网文档]: https://uniapp.dcloud.net.cn/vernacular.html# 一、开发工具准备 1-1 安装HBuilder 按照官方推荐&#xff0c;先装一个HBuilder 下载地址&#xff1a; https://www.dcloud.io/hbuilderx.html1-2 安装微信开…...

uniapp微信小程序隐私保护引导新规

1.components中新建组件PrivacyPop.vue <template><view class"privacy" v-if"showPrivacy"><view class"content"><view class"title">隐私保护指引</view><view class"des">在使用当…...

超图嵌入论文阅读2:超图神经网络

超图嵌入论文阅读2&#xff1a;超图神经网络 原文&#xff1a;Hypergraph Neural Networks ——AAAI2019&#xff08;CCF-A&#xff09; 源码&#xff1a;https://github.com/iMoonLab/HGNN 500star 概述 贡献&#xff1a;用于数据表示学习的超图神经网络 (HGNN) 框架&#xf…...

安全运营中心(SOC)技术框架

2018年曾经画过一个安全运营体系框架&#xff0c;基本思路是在基础单点技术防护体系基础上&#xff0c;围绕着动态防御、深度分析、实时检测&#xff0c;建立安全运营大数据分析平台&#xff0c;可以算作是解决方案产品的思路。 依据这个体系框架&#xff0c;当时写了《基于主动…...

并行和并发的区别

从操作系统的角度来看&#xff0c;线程是CPU分配的最小单位。 并行就是同一时刻&#xff0c;两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻&#xff0c;只有一个执行&#xff0c;但是一个时间段内&#xff0c;两个线程都执行了。并发的实现依赖于…...

别再踩坑了!Django Ckeditor配置全指南:从基础使用到高级定制(2023最新版)

Django Ckeditor实战手册&#xff1a;2023年高效配置与深度定制技巧 如果你正在为Django项目寻找一个功能强大且可定制的富文本编辑器&#xff0c;Ckeditor无疑是最佳选择之一。但配置过程中那些令人头疼的兼容性问题、图片上传失败、工具栏自定义困难&#xff0c;确实让不少开…...

从NDVI到地表温度:用ENVI Band Math一次性搞定植被与热环境分析

ENVI波段运算实战&#xff1a;NDVI与地表温度的高效批量处理技巧 遥感影像分析中&#xff0c;植被指数和地表温度是最基础却又最关键的指标。传统操作流程往往需要反复切换不同工具模块&#xff0c;既耗时又容易出错。而ENVI的Band Math功能就像一把瑞士军刀&#xff0c;能将这…...

OpenCVSharp摄像头开发避坑指南:C#实现高清录像+实时滤镜(WinForm版)

OpenCVSharp工业级摄像头开发实战&#xff1a;高清录像与实时滤镜的进阶技巧 在工业视觉检测和实时直播领域&#xff0c;稳定高效地采集视频流是核心需求。C#开发者常选择OpenCVSharp作为计算机视觉开发工具&#xff0c;但实际应用中总会遇到帧率不稳定、资源泄漏或参数配置不当…...

Qwen3-VL:30B开源可部署优势展示:无需License、无调用限制、全链路私有化保障

Qwen3-VL:30B开源可部署优势展示&#xff1a;无需License、无调用限制、全链路私有化保障 1. 为什么你需要一个私有化的多模态大模型&#xff1f; 想象一下这个场景&#xff1a;你的团队需要处理大量产品图片&#xff0c;并生成对应的营销文案。你打开某个在线AI工具&#xf…...

半导体制造中的ProcessJob与Control Job:从定义到实战避坑指南

半导体制造中的ProcessJob与Control Job&#xff1a;从定义到实战避坑指南 在半导体制造的高精度世界里&#xff0c;每一片晶圆的流转都像一场精密编排的交响乐。而ProcessJob&#xff08;PJ&#xff09;和Control Job&#xff08;CJ&#xff09;就是这场演奏中不可或缺的指挥…...

快捷键冲突终结者:Hotkey Detective全方位排障指南

快捷键冲突终结者&#xff1a;Hotkey Detective全方位排障指南 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 问题诊断&#xff1a;你的快捷键为…...

像素风AI工具体验:像素史诗智识终端,让研究变得有趣又高效

像素风AI工具体验&#xff1a;像素史诗智识终端&#xff0c;让研究变得有趣又高效 1. 引言&#xff1a;当科研遇上像素冒险 想象一下&#xff1a;你是一位勇者&#xff0c;站在像素风格的城堡前&#xff0c;准备开始一场史诗般的冒险。但这次&#xff0c;你的武器不是剑与盾&…...

软考高项“上岸”指南:三位宝藏老师,专治你的备考焦虑

备战软考高项&#xff0c;尤其是面对2026年可能更加灵活的考情&#xff0c;选择一位对的引路人至关重要。今天&#xff0c;就为大家深度介绍软考老金团队的三位王牌导师——尹老师、金老师、秦老师。他们风格互补&#xff0c;却有着共同的目标&#xff1a;陪你稳稳上岸。尹老师…...

告别混乱文件管理:用NERDTree打造VIM项目导航系统

告别混乱文件管理&#xff1a;用NERDTree打造VIM项目导航系统 每次打开一个包含数百个文件的复杂项目时&#xff0c;你是否会感到一阵眩晕&#xff1f;当你在多个目录间反复切换查找某个配置文件时&#xff0c;是否觉得时间在指尖悄然流逝&#xff1f;对于资深VIM用户而言&…...

源码级重构与低代码交付:企业级 AI 视频管理平台的二次开发实战

作为一位在安防行业摸爬滚打 10 年的架构师&#xff0c;我经常被集成商朋友的灵魂拷问&#xff1a;“有没有一套代码&#xff0c;既能直接拿去给客户演示&#xff08;低代码&#xff09;&#xff0c;又能让我根据客户需求改得‘面目全非’&#xff08;深度定制&#xff09;&…...