【webpack】初始化

webpack

          • 旧项目的问题
          • 下一代构建工具 Vite
      • 主角 :webpack
          • 安装webpack
          • 1,mode的选项
          • 2,使用source map 精准定位错误行数
          • 3,使用watch mode(观察模式),自动运行
          • 4,使用webpack-dev-server工具,自动刷新
      • 自定义webpack配置初始化代码
      • webpack处理资源模块(asset module)
          • asset/resource
          • asset/inline
          • asset/source
          • asset
      • 管理资源(loader)
          • css-loader
          • 抽离style里代码,并压缩
          • 知识点补充,在css里面加载图片资源
          • 知识点补充,加载fonts字体
          • 知识点补充,加载csv,tsv,xml数据
          • 自定义JSON模块parser
      • 使用babel-loader转换js文件
          • regeneratorRuntime插件

旧项目的问题

作用域问题

  • return 抛出赋给变量

如何解决代码拆分问题

  • module.exports()抛出模块
  • require()接受模块

如何让游览器支持node模块

下一代构建工具 Vite

主角 :webpack

  • 它可以帮助我们打包javascript的应用程序,
  • 同时支持es的模块化以及commonjs
  • 可以扩展支持很多的静态资源打包,图片,字体,样式等
  • 只能理解js和json这样的文件
  • 出色的功能:除了引入js还可以使用内置的资源模块

引用千峰教育一个图:
在这里插入图片描述

安装webpack

安1:npm init -y
安2:npm install webpack webpack-cli --save-dev
安3: npm install html-webpack-plugin -D

  • 执行完前两个会产生三个文件,第三个是为了自动引入资源
    在这里插入图片描述
1,mode的选项
  mode: 'none', //不展示编译时候的警告,还可以选择'development'
2,使用source map 精准定位错误行数
  • 当我们游览器报错,点击报错内容时,发现报错的指向不是源文件时候,不好排除错误
 devtool: 'inline-source-map', //可以精准的锁定出错位置行数,并且打包出的文件不再是乱码
3,使用watch mode(观察模式),自动运行
  • 每次编译代码,都需要手动运行npx webpack会显得很麻烦
  • 运行 npx webpack --watch
  • 但还有点问题,现在弄完还需要游览器再刷新一下,如何自动刷新游览器!
4,使用webpack-dev-server工具,自动刷新
  • 安4. npm install webpack-dev-server -D
  • 配置里面添加
 devServer: {static: './dist', //需要热模块更新的文件},

自定义webpack配置初始化代码

在本地开发环境里安装,所以加-D

// path.resolve(_dirname,'./dist'),获取文件的绝对路径,参数一,代表当前文件的物理路径,参数2是基于这个路径下的文件路径
const path = require('path');
// HtmlWebpackPlugin,可以自动引入资源文件
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {// 入口文件的地址entry: './src/index.js',output: {// 指定输出文件的文件名filename: 'budle.js',// 指定输出路径,这个要设置为绝对路径,:webpack.config.js配置文件中----" dirname " 必须为两个下划线“_ _”,否则打包报错path: path.resolve(__dirname, './dist'),// 打包前清理上一次无用的打包内容clean: true,},// 不展示编译时候的警告,还可以选择'development'mode: 'none',// 可以精准的锁定出错位置行数,并且打包出的文件不再是乱码devtool: 'inline-source-map',plugins: [// 创建一个插件的实例对象new HtmlWebpackPlugin({template: './index.html', // 模板filename: 'app.html', // 输出的文件名,inject: 'body', // 自定义标签的放置位置,默认在head}),],//运行路径devServer: {static: './dist', //需要热模块更新的文件},
};

webpack处理资源模块(asset module)

  • 资源模块的类型,称之为asset module type
  • 四种类型
asset/resource
  • 会发送一个单独的文件并导出URL
output: {filename: 'budle.js',path: path.resolve(_dirname, './dist'), clean: true, // assetModuleFilename: 'images/test.png'//方法2:定义资源模块的输出包名//但是,不能每个文件名都叫这个名,所以要根据文件的内容来生成一个哈希的字符串,生成后缀名assetModuleFilename: 'images/[contenthash].[ext]', },
moduleS: {//加载资源模块rules: [{test: /\.png$/,type: 'asset/resource', //资源类型generator: {//方法1,优先级高filename: 'images/[contenthash][ext]', //修改生成的文件的文件名},},],},
asset/inline
  • 会导出一个资源的Data URL,但不会产生打包文件
  • 一般生成的就是游览器可查看的base64格式的路径
{test: /\.svg$/,type: 'asset/inline', //资源类型},
asset/source
  • 会导出资源的源代码,但不会产生打包文件
{test: /\.txt$/,type: 'asset/source', //资源类型},
asset
  • 会在导出一个Data URL和发送一个单独的文件之间自动进行选择
  • 自动的在resource和inline之间进行选择,小于8kb的文件,将会
    视为inline模块,否则会被视为resource模块类型

在这里插入图片描述

管理资源(loader)

  • 为了解决webpack只能理解js和json这样的文件,理解不了其他文件的问题
  • 支持链式调用且逆加载
css-loader

npm install css-loader -D
npm install style-loader -D //会帮助我们把css放置到页面上

  • 配置一下
{test: /\.css$/,use: ['style-loader', 'css-loader'],//顺序不能颠倒
},

在这里插入图片描述

  • 想要加载less,sass等这样的css文件
  • npm install less-loader less -D
  • 配置完需要重新启动一下
{test: /\.(css|less)$/,use: ['style-loader', 'css-loader''less-loader'],//顺序不能颠倒
},
抽离style里代码,并压缩
  • 目前,上面的css和页面在一起
  • 想要将style里面的这些代码抽离出来
  • npm Install mini-css-extract-plugin -D
  • 依赖webpack5环境,接下来开始配置
  • 步骤一:导入
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
//MiniCssExtractPlugin,把css提取到单独的文件中
  • 步骤二:实例化一下

  • 并且可以修改存放文件名
    在这里插入图片描述
    在这里插入图片描述

  • 步骤三:添加loader
    在这里插入图片描述

  • 步骤四:文件打包了,但没有压缩

  • 解决思路

  • npm install css-minimizer-webpack-plugin -D

  • 步骤一:导入

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
//压缩css文件
  • 步骤二:在优化的配置里面配置
    在这里插入图片描述
  • 步骤三:
    在这里插入图片描述
知识点补充,在css里面加载图片资源

在这里插入图片描述

知识点补充,加载fonts字体
  • 像字体这样的其他资源如何可以接收并加载任何文件,然后将其输出到构建目录

  • 步骤一,配置
    在这里插入图片描述

  • 步骤二.
    在这里插入图片描述在这里插入图片描述

知识点补充,加载csv,tsv,xml数据
  • 可以使用csv-loader和xml-loader
  • npm install csv-loader xml-loader -D
    在这里插入图片描述
  • 步骤二:在使用的js文件中引入要使用的文件即可
import Xml from './assets/data.xml';
import Csv from './assets/data.csv';
自定义JSON模块parser
  • 替代特定的webpack loader,可以将任何toml,yaml或json5文件作为JSON模块导入
  • npm install toml yaml json5 -D
    在这里插入图片描述
  • 步骤三,正常引入使用即可
    在这里插入图片描述
    在这里插入图片描述

使用babel-loader转换js文件

  • npm install babel-loader @babel/core @babel/preset-env -D
  • 因为webpack只能做js模块化的打包,并不能转化js里的代码,所以babel-loader转换
  • 将ES6转换成低版本的游览器能够识别的ES代码
  • 注意点;这样写会将nodemodule中的js也编译,所以需要排除一下
  • 使用exclude属性
    引用千峰教育
regeneratorRuntime插件
  • 运行上述babel-loader的项目,发现有报错regeneratorRuntime

  • regeneratorRuntime是webpack打包生成的全局辅助函数,由babel生成,用于兼容async/await的语法
    在这里插入图片描述

  • 最后,修改一下配置
    在这里插入图片描述

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

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

相关文章

Linux_CentOS_7.9配置oracle sqlplus、rman实现上下按键切换历史命令等便捷效率功能之简易记录

配置oracle sqlplus以及rman可以上下按键切换历史命令等便捷效率功能 设置前提是已经yum安装了rlwrap软件具体软件下载及配置参考文章http://t.csdnimg.cn/iXuVK su - oracleVim .bash_profile ## 文件中增加如下的别名设置 ---------------- alias sqlplusrlwrap sqlplus…

理解IoC容器初始化

问题:当自己面试或者背诵八股文时,会背到各种各样的spring底层的东西,自己越看越迷糊。 OS:不知道兄弟们是不是也会这样?如果大家没有说明我太菜了。 原因:就是自己学的框架越来越多,很多框架…

P8625.生命之树

求最大的子树之和 维护包含当前节点的最大子树之和就好了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e610; ll w[N]; vector<int>g[N]; ll f[N]; ll res;ll dfs(int u,int father){f[u] w[u];for(auto &t:g[u]){if(tf…

2023.12.10 homework

五年级一元一次方程

参数占位符#{}和${}

#是预处理而$是直接替换 Mybatis在处理#{}时&#xff0c;会将SQL中的#{}替换成占位符&#xff1f;&#xff0c;再使用preparedStatement的set方法来赋值。而Mybatis在处理 时&#xff0c;是将 {}时&#xff0c;是将 时&#xff0c;是将{}直接替换成变量的值 我们分别使用#{}和…

JavaScript-Window对象

Window对象 BOM&#xff1a;浏览器对象模型 定时器-延时函数 JavaScript内置的一个用来让代码延迟执行的函数&#xff0c;setTimeout setTimeout(回调函数&#xff0c;等待的毫秒数);setTimeout仅仅只执行依次&#xff0c;所以可以理解为就是把一段代码延迟执行&#xff0c…

网络协议疑点记录

1.RIP, OSPF,BGP 首先什么是自治系统:治系统就是几个路由器组成了一个小团体 ?,小团体内部使用专用的协议进行通信,而小团体和小团体之间也使用专用的协议进行通信。 IGP RIP 距离矢量路由算法,bellman-ford算法,每个路由节点知道全局的路由信息,通过和邻居交换信息得…

五.单行函数

单行函数 1.函数的理解1.1什么是函数1.2不同DBMS函数的差异1.3MySQL的内置函数分类 2.数值函数2.1基本函数2.2角度与弧度互换函数2.3三角函数2.4指数与对数2.5进制间的转换 3.字符串函数4.日期和时间函数4.1获取日期、时间4.2日期与时间戳的转换4.3获取月份、星期、星期数、天数…

perl处理base64、md5、SHA-1、SHA-256的计算

使用perl可以进行base64、md5、SHA-1、SHA-256的计算&#xff0c;使用也非常方便&#xff0c;下面是示例代码&#xff1a; #! /usr/bin/perl use v5.14; use MIME::Base64; use Digest;my $test_str hello world;# 测试base64 say encode_base64($test_str);# 测试md5 my $md…

【Copilot】Edge浏览器的copilot消失了怎么办

这种原因&#xff0c;可能是因为你的ip地址的不在这个服务的允许范围内。你需要重新使用之前出现copilot的ip地址&#xff0c;然后退出edge的账号&#xff0c;重新登录一遍&#xff0c;最后重启edge&#xff0c;就能够使得copilot侧边栏重新出现了。

计算机基础知识66

Auth的补充 #概念&#xff1a;是django 的一个app&#xff0c;关于用户的登录&#xff0c;退出&#xff0c;注册... # 配置文件中配置&#xff1a;表会被迁移 INSTALLED_APPS [django.contrib.auth,] # auth有哪些表---权限控制&#xff1a; Permission&#xff1a;auth_permi…

用23种设计模式打造一个cocos creator的游戏框架----(十二)状态模式

1、模式标准 模式名称&#xff1a;状态模式 模式分类&#xff1a;行为型 模式意图&#xff1a;允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构图&#xff1a; 适用于&#xff1a; 1、一个对象的行为决定于它的状态&#xff0c;并且它必须…

【C语言】字符串函数strcpystrcatstrcmpstrstr的使⽤和模拟实现

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

电源小白入门学习1——电源系统架构和相关指标

电源小白入门学习1——电源系统架构和相关指标 电源系统架构电源系统的指标及测量方法电源的效率电源的静态电流输出电压调整率纹波测量的注意事项动态负载测试 在开始本期内容之气&#xff0c;我先简单介绍一下我们电源小白学习系列内容&#xff1a;首先我是一个嵌入式小白&am…

在VSCode中运行Python脚本文件时如何传参

以下实验所处的操作系统环境说明&#xff1a; OS版本MacOSMonterey 12.1VSCodeOctober 2023 (version 1.84.2) 一、背景 在 VSCode 中写好 Python 脚本后&#xff0c;如果要运行起来&#xff0c;可以怎么做呢&#xff1f; 一般有以下几种方式&#xff1a; 1、直接在 VSCode…

sentinel整合nacos配置中心持久化

在网上找了很多的资料&#xff0c;发现sentinel整合nacos持久化的博文和视频大多数都只有改造限流部分的教程&#xff0c;并且都需要修改前端&#xff0c;略显麻烦&#xff0c;至于剩下的熔断、热点流控、授权的更是没有相关的改造教程&#xff0c;最后在知乎的看到一篇文章后让…

百科词条可以删除吗?如何删除自己的百度百科?

近日&#xff0c;小马识途营销顾问接到不少客户删除自己百科词条的咨询&#xff0c;有不少人自己并没有去建立百科词条&#xff0c;但是网上已经有了&#xff0c;有的信息不正确&#xff0c;甚至有的信息是负能量的&#xff0c;对当事人自己造成一定的困扰&#xff0c;所以寻求…

PbootCMS 前台RCE漏洞复现

0x01 产品简介 PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统,是一套高效、简洁、 强悍的可免费商用的PHP CMS源码,能够满足各类企业网站开发建设的需要 0x02 漏洞概述 PbootCMS v<=3.1.6版本中存在模板注入,攻击者可构造特定的链接利用该漏洞,执行…

线程及实现方式

一、线程 线程是一个基本的CPU执行单元&#xff0c;也是程序执行流的最小单位。引入线程之后&#xff0c;不仅是进程之间可以并发&#xff0c;进程内的各线程之间也可以并发&#xff0c;从而进一步提升了系统的并发度&#xff0c;使得一个进程内也可以并发处理各种任务&#x…

【Hive】——安装部署

1 MetaData&#xff08;元数据&#xff09; 2 MetaStore &#xff08;元数据服务&#xff09; 3 MetaStore配置方式 3.1 内嵌模式 3.2 本地模式 3.3 远程模式 4 安装前准备 <!-- 整合hive --><property><name>hadoop.proxyuser.root.hosts</name><v…