【Vue】各种loader的基本配置与使用

news2024/11/19 23:32:58

csdn动态图标

✍️ 作者简介: 前端新手学习中。

💂 作者主页: 作者主页查看更多前端教学

🎓 专栏分享:css重难点教学   Node.js教学 从头开始学习   ajax学习

目录

  • webpack中的loader
    •   loader概述
    •   打包处理css文件
    •   打包处理less文件
    •   打包处理图片
    •   打包处理js高级语法
    •   优化打包以及图片和js文件存放路径
    •   自动清理dist目录下的旧文件
  • 文件目录设置
  • Source Map
    •   什么是Source Map
    •   默认Source Map的问题
    •   解决默认Source Map的问题
    •   只定位行数不暴露源码
    •   Source Map的最佳实践

webpack中的loader

  loader概述

在实际开发过程中,webpack默认只能打包处理以js后缀名结尾的模块,其他非.js后缀名结尾模块,webpack默认处理不了,需要调用loader加载器才可以正常打包,否则会报错!

loader可以协助webpack打包处理特定的文件模块。

  • css-loader可以打包处理.css相关的文件
  • less-loader可以打包处理.less相关的文件
  • babel-loader可以打包处理webpack无法处理的高级js语法
    流程图
    在这里插入图片描述

接下来我们需要移除无序列表中的行头前缀。
在src文件夹中创建css文件夹,再从css文件夹中创建index.css文件,并写好样式代码。

li{
    list-style: none;
}

任何相关文件,我们都采取模块导入的方式,在index.js中导入css模块

import './css/index.css'

我们保存后,发现会报错,是因为loader没有配置。
在这里插入图片描述

  打包处理css文件

  1. 运行npm i style-loader@3.0.0 css-loader@5.2.6 -D命令,安装处理css文件的loader
  2. 在webpack.config.js的module->rules数组中,添加loader规则如下
    在这里插入图片描述
    其中,test表示匹配的文件类型,use表示对应要调用的loader。
    注意
  • use数组中指定的loader顺序是固定的。
  • 多个loader的调用顺序是从后往前调用。
    在webpack.config.js文件中写入如下代码
   module: {
        rules: [
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }
        ]
    }

重新运行服务器,发现css有了效果。
在这里插入图片描述

  打包处理less文件

  1. 运行npm i less-loader@10.0.1 less@4.1.1 -D命令
  2. 在webpack.config.js的module->rules数组中,添加loader规则如下:
    在这里插入图片描述
    写一个less样式文件,文件与css同级。
html,body,ul{
    margin: 0;
    padding: 0;
    li {
        line-height: 30px;
        padding-left: 20px;
        font-size: 12px;
    }
}

样式文件写完后,然后进行less模块导入,保存后会报相同的错误。
在这里插入图片描述
在这里插入图片描述
使用npm i less-loader@10.0.1 less@4.1.1 -D 下载相关依赖。
再从webpack.config.js中的css loader下面,进行一个less Loader的设置,就可以成功应用less样式文件了。

{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }

  打包处理图片

base64
使用base64字符串来加载图片,可以减少不必要的请求,浏览器在获取标签的同时可以一并获取到图片。
打包步骤

  1. 运行npm i url-loader@4.1.1 file-loader@6.2.0 -D命令
  2. 在webpack.config.js的module->rules数组中,添加loader规则如下
    在这里插入图片描述
    其中?之后的是loader的参数项:
  • limit用来指定图片的大小,单位是字节(byte)
  • 只有<=limit大小的图片,才会被转为base64格式的图片

操作练习
目标:添加一个img标签通过动态方法给它添加src值。
首先在src目录下建立一个images文件夹,里面放置一张图片。
写好img标签

  <img src="" alt="" class="box">

在index.js中进行模块导入与应用,导入的logo就是图片的base64

//导入图片文件
import logo from './images/logo.jpg';
//给img标签的src属性赋值
$('.box').attr('src', logo)

然后进行loader的安装。

npm i url-loader@4.1.1 file-loader@6.2.0 -D

安装完成后进行webpack.config.js的配置

   //处理图片文件的loader
            {test:/\.jpg|png|gif$/,use:'url-loader'}

现在 在进行打包运行 图片就能够成功显示了。

  打包处理js高级语法

特别高级的js语法webpack本身也无法处理,得需要相应的loader。

在index.js中书写js高级语法

//高级 js

//定义装饰器函数
function info(target) {
    target.info = 'Person info';
}

//添加装饰器
@info
//定义一个类
class Person { };

console.log(Person.info);

安装loader依赖包并进行配置

npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D
   //处理高级js的loader,exclude用来忽略不用转换的第三方包
            { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
    

新建一个babel.config.js文件,并进行配置。

module.exports = {
    //转换高级语法
    plugins: [['@babel/plugin-proposal-decorators', { legacy: true }]]
}

接下来就可以进行运行打包,浏览器控制台就能正确显示。

  优化打包以及图片和js文件存放路径

优化打包
在这里插入图片描述
在scripts中设置多个打包方式
其中前两个打包模式mode是webpack.config.js中设置的development模式
第一个打包模式是在内存中显示的便于开发浏览。
第二个是打包到物理层面上的打包。
第三个也是打包到物理层面上的打包,只不过使用的是生成模式会对代码进行压缩,直接在这里设置mode,优先级大于webpack.config.js中的设置。
图片存放路径
在前面的图片loader中 除了limit可以设置处理图片的最大值,(转化成base64的图片不会被进行打包,)我们还可以设置图片的存放路径,用&链接通过outputPath进行设置。

 { test: /\.jpg|png|gif$/, use: 'url-loader?limit=4000&outputPath=images' },
           

js文件存放路径
只需要设置输出文件名前,加一个文件夹,输出的时候就会带着这个文件夹。

 output: {
        //指定存放目录
        path: path.join(__dirname, 'dist1'),
        filename: 'js/new.js'
    },

在这里插入图片描述

  自动清理dist目录下的旧文件

为了在每次打包发布时自动清理掉dist目录中的旧文件,可以安装并配置clean-webpack-plugin插件。
安装插件

npm i clean-webpack-plugin -D

导入模块

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

将实例化对象写入之前的plugins数组中

plugins: [HtmlPlugin, new CleanWebpackPlugin()],

这样 在我们每次运行打包输出文件的时候,都会自动清除原来文件,重新生成。
在新版本中,我们可以直接在output输出文件夹下面加一个clean:true的属性,效果是一样的。
在这里插入图片描述

文件目录设置

当我们引入文件时,如果层级过深的化,就会看到…/…/…/…/…/main.js,非常的不便于阅读与理解,除了从内到外寻找文件,我们还可以直接从外层寻找文件,可以直接设置指定的文件名为固定文件。

我们需要在webpack.config.js中进行设置

 resolve: {
        alias: {
            //@就代表src文件夹
            '@': path.join(__dirname, 'src')
        }
    }

在这里插入图片描述
创建info.js 和msg.js文件进行测试。
在这里插入图片描述
效果是一样的 实际上就是绝对路径,设置了哥文件夹变量。
在这里插入图片描述

Source Map

  什么是Source Map

Source Map就是一个信息文件,里面储存着位置信息。也就是说,Source Map文件中存储着压缩混淆后的代码,所对应的转换前的位置。
有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。

  默认Source Map的问题

开发环境下默认生成的Source Map,记录的是生成后的代码的位置,会导致运行时报错的行数与源代码行数的不一致。

  解决默认Source Map的问题

开发环境下,推荐在webpack.config.js中添加如下的配置,即可保证运行时报错的行数与源代码行数一致。

在这里插入图片描述

   //开发测试阶段,建议大家把devtool的值设置为eval-source-map,便于调试。
    devtool: 'eval-source-map', //运行时报错的行数与源代码一致
    // devtool: 'source-map', //还会在本地生产一个map记录文件

在生产环境下,如果省略了devtool选项,则最终生成的文件中不包含Source Map,这能够防止原始代码通过Source Map的形式暴露给别有所图之人。

  只定位行数不暴露源码

在生产环境下,如果只想定位报错的具体行数,且不想暴露源码,此时可以将devtool的值设置为nosources-source-map。

 //在实际发布的时候,建议大家把devtool的值设置为nosources-source-map,或直接关闭devtool。
     devtool:'nosources-source-map'   只显示行数不暴露源码

  Source Map的最佳实践

  1. 开发环境下
    • 建议把devtool的值设置为eval-source-map
    • 好处:可以精准定位到具体的错误行
  2. 生产环境下
    • 建议关闭Source Map或将devtool的值设置为nosources-source-map
    • 好处:放置源码泄露,提高网站的安全性。

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

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

相关文章

LWIP框架

目录 协议栈分层思想 1. 网络接口层 2. 网络层 3. 传输层 4. 应用层 进程模型 单进程模型 协议栈编程接口 1、Raw/Callback API 2、Netconn API 3、Socket API 协议栈分层思想 TCP/IP协议完整的包含了一系列构成互联网基础的网络协议&#xff0c;TCP/IP协议的开发出…

HTTP Digest Authentication 使用心得

简介 浏览器弹出这个原生的对话框&#xff0c;想必大家都不陌生&#xff0c;就是 HTTP Baisc 认证的机制。 这是浏览器自带的&#xff0c;遵循 RFC2617/7617 协议。但必须指出的是&#xff0c;遇到这界面&#xff0c;不一定是 Basic Authentication&#xff0c;也可能是 Dige…

墨门云终端行为趋势报表,泄密风险提前预警

事件响应滞后&#xff0c;事后再补救&#xff0c;为时晚矣&#xff0c;据IBM的数据泄露成本报告显示&#xff0c;加强风险监测可更快发现数据泄露行为&#xff0c;有效降低企业的数据泄露成本&#xff0c;可见建立完善的风险预警响应机制&#xff0c;可以避免更大的损失&#x…

5G无线技术基础自学系列 | NSA组网场景下移动性管理

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 NSA组网场景下移动性管理涉及的相关概念…

js操作二进制数据

使用ArrayBuffer对象保存二进制数据&#xff0c;使用TypedArray和DataView 视图来读写数据。 ArrayBuffer代码内存中的一段数据 const buff new ArrayBuffer(4)这样就创建了一个4(byte)字节的长度的内存判断&#xff0c;初始值都为0 注&#xff1a;一般中文占2个字节&#xff…

葡聚糖修饰Hrps共价三聚肽|葡聚糖修饰CdSe量子点

葡聚糖修饰Hrps共价三聚肽|葡聚糖修饰CdSe量子点 葡聚糖修饰Hrps共价三聚肽 中文名称&#xff1a;葡聚糖修饰Hrps共价三聚肽 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xff1a;瓶装/袋装 溶解性&am…

爆火的 ChatGPT 会让客服岗位消失吗?

近日&#xff0c;由 OpenAI 推出的 ChatGPT 在全球互联网爆火。具体有多火呢&#xff1f;根据 OpenAI 的 CEO Sam Altman 的说法&#xff1a;上周三才上线的 ChatGPT&#xff0c;短短几天&#xff0c;用户数已突破 100 万大关。 那么&#xff0c;ChatGPT 是什么呢&#xff1f;…

无线充电智能车的制作

本文素材来源于宁夏大学 作者&#xff1a;白二曹、王瑞、穆琴、王童兵 指导老师&#xff1a;康彩 一、项目简介 1.功能介绍 无线充电智能车由无线充电、自动控制、红外遥控、网页显示四部分组成。 &#xff08;1&#xff09;流程描述 用户端浏览器访问http://127.0.0.1页面…

Cy5.5 Tyramide,Cyanine5.5 Tyramide,花青素Cy5.5 酪酰胺化学试剂供应

一&#xff1a;产品描述 1、名称 英文&#xff1a;Cy5.5 Tyramide&#xff0c;Cyanine5.5 Tyramide 中文&#xff1a;花青素Cy5.5 酪酰胺 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Cyanine 4、分子量&#xff1a;738.4 5、分子式&#xff1a;C48H52CIN3O2 6、…

如何用DOS命令设置ip地址及DNS

用DOS命令设置ip地址及DNS 设置/修改IP地址&#xff0c;子网掩码&#xff0c;网关的格式&#xff1a; netsh interface ip set address "本地连接" static 10.25.35.35 255.255.255.0 10.25.35.7 auto[more] 命令的意思是将“本地连接” ip地址设置成 10.25.35.3…

SD NAND 的 SDIO在STM32上的应用详解(下篇)

七.SDIO外设结构体 其实前面关于SDIO寄存器的讲解已经比较详细了&#xff0c;这里再借助于关于SDIO结构体再进行总结一遍。 标准库函数对 SDIO 外设建立了三个初始化结构体&#xff0c;分别为 SDIO 初始化结构体SDIO_InitTypeDef、SDIO 命令初始化结构体 SDIO_CmdInitTypeDef…

Lq93:复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.011.255.2…

Java基础:Map集合

1. Map集合概述 现实生活中&#xff0c;我们常会看到这样的一种集合&#xff1a;IP地址与主机名&#xff0c;身份证号与个人&#xff0c;系统用户名与系统用户对象等&#xff0c;这种一一对应的关系&#xff0c;就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象…

IOC 容器

IOC 概念和原理 1. 什么是 IOC&#xff1f; 控制饭庄&#xff08; Inversion of Control &#xff0c;缩写为 IOC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08; Depende…

基于SSM的网红书购物商城(源码+论文+开题报告+答辩PPT)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

java实现简单窗口小游戏“扫雷”

前言 忘记是从何处看到过关于扫雷小程序的文章&#xff0c;所以这次也就跟着做一下。其实很简单的&#xff0c;如果有java入门的同学也可以尝试一下自己做这种java小程序。几行代码做几遍基本上能摸清楚这些基础了&#xff0c;对于编程能力也能提高一些。&#xff08;虽然小编…

appium笔记——01环境搭建

0、关系图 1.appium客户端&#xff1a; python程序&#xff0c;链接appium服务器&#xff0c;并发送请求 2.appium服务端(模拟器客户端)&#xff1a; appium程序&#xff0c;需要提前启动&#xff0c;不仅充当appium服务端&#xff0c;还充当模拟器客户端&#xff08;接收h…

基于Apriori算法的购物网站商品推荐系统

基于Apriori算法的购物网站商品推荐系统 目 录 一、 算法内容 3 Step 1 收集用户偏好 3 Step 2 对数据进行预处理 3 Step 3 计算相似度 4 Step 4 找邻居 5 Step 5 计算推荐 6 二、 预期结果 6 三、 对比和讨论 7 Step 5 计算推荐 Section A 基于用户的协同过滤(User CF) 通过前…

Python中12个常用模块的使用教程

1. time模块 import time *一*#时间戳--》结构化时间--》格式化的字符串时间 ----------------------------------------------------------------------------- res1time.localtime(654126574) print(res1 ) #res1time.struct_time(tm_year1990, tm_mon9, tm_mday24, tm_hour…

数学大世界杂志数学大世界杂志社数学大世界编辑部2022年第7期目录

名家论坛《数学大世界》投稿&#xff1a;cn7kantougao163.com 新时期高中数学课堂教学有效性的提升策略 姜徳余; 3-5 化“零”为整&#xff0c;以“构”促学——小学数学结构化教学策略探析 孟龙平; 6-8 做反思型教师&#xff0c;加强数学衔接模块教学 陈小菊; 9-1…