webpack里的loader

《Vite 基础知识》使用 ?raw 将 vue文件转为字符串(两种方式) 学习 vite 时,找到插件 awesome-vite,顺着找,可以看到插件 vite-plugin-raw 起作用。官方翻译该插件可将任何类型的文件转换为字符串。 这里仅对 .vue 文件做转换。使用场景,如使用 codemirror 显示源码等; 阅读详情

Loaders

网址:https://webpack.js.org/loaders/
介绍:
在实际项目中,不仅有js文件,还有css、图片、ES6转ES5、tpyescript转ES5,将less,scss转化css,将jsx、vue文件转换js文件这样就需要loader来解决
1.作用:为了解决除了js类型的(txt,md 之类的)
2.代码示意loader:

 module:{
        rules:[
            {
                test:/\.txt$/,
                loader: 'raw-loader'   //加载原始内容的loader
            }
        ],
    }

​ 注意:webpack 碰到不识别的模块的时候,webpack 会在配置的 module 中进行该文件解析规则的查找

  • rules 就是我们为不同类型的文件定义的解析规则对应的 loader,它是一个数组
  • 类型规则通过 test 选项来定义,通过正则匹配,通过正则的方式来匹配文件后缀类型
  • use针对不同文件类型,调用对应的loader;

3.loader类型:
案例:

3-1 md类型

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src='./dist/main.js'></script>
</body>
</html>
	src/data/haha.md
# 哈哈
javascript
python
php
css
ui

​ src/data/index.js

import haha from "./data/haha.md";
console.log(haha);
document.body.innerHTML='haha'   //把内容输出到页面
console.log('哈哈哈哈');

​ 1.安装mardown-loader html-loader

npm install markdown-loader
npm install --save-dev html-loader

​ 2.配置 webpack.config.js

 module:{
        rules:[
            {
                test:/\.txt$/,
                loader: 'raw-loader'   //加载原始内容的loader
            },
            {
                test:/\.md$/ ,        //正则判断是否是markdown
                //执行多个loader,他执行顺序是从后往前解析
                use:['html-loader','markdown-loader']
            }
        ],     
    }

3.打包: ./node_modules/.bin/webpack

.txt类型:*

​ src/raw-loader.js

import aa from './data/a.txt';
import bb from './data/b.md';

console.log('aa: ', a);    //报错
console.log('bb: ', b);      //报错

webpack 会报错,因为 webpack 处理不了 txt 和 md 这样的非 js 的模块,可以通过loader来解决

解决txt类型:

3-2 raw-loader

1.先安装

npm install --save-dev raw-loader

2.然后在 webpack.config.js 中进行配置

module.exports = {
  ...,
  module: {
      rules: [
      {
        test: /\.txt$/,    //正则验证是否是txt
        loader: 'raw-loader'   // 加载原始内容的loader
    	}
    ]
	}
}

3.打包:./node_modules/.bin/webpack

3-3 file-loader(上传图片)

把识别出的资源模块,移动到指定的输出⽬目录,并且返回这个资源在输出目录的地址(字符串)

1.安装:

npm install --save-dev file-loader

2.然后在 webpack.config.js 中进行配置

rules: [
  ...,
	 {	
    test: /\.(png|jpe?g|gif)$/i, 
    use:{
        loader:'file-loader',
        options:{
        //都是占位符
        //'[path] : 路径
        //[name]   : 文件名
        //.[ext]   :后缀
        name: "[path][name].[ext]",
        //相对的是全局的outputPath
        outputPath: "/image",
        // 打包后文件的 url
        publicPath: './dist',
   				 }
			} 
}	
]

3.index.js

import  aa  from "./data/a.png";
console.log(aa);
let img=new Image();  //定义一个标签
img.src=aa;           //设置属性
document.body.appendChild(img)    //追加到页面中 

4.打包: ./node_modules/.bin/webpack

5.运行html文件

占位符网址:https://webpack.js.org/loaders/file-loader#placeholders

3-4 url-loader

可以处理理 file-loader 所有的事情,但是遇到图片格式的模块,可以选择性的把图片转成 base64 格式的字符串,并打包到 js 中,对⼩体积的图片⽐较合适,⼤图⽚不合适。

1.安装:

npm install --save-dev url-loader

2.然后在 webpack.config.js 中进行配置

rules: [
  ...,
	{
		test: /\.(png|jpe?g|gif)$/,
    use: {
      loader: "url-loader",
      options: {
        // placeholder 占位符 [name] 源资源模块的名称
        // [ext] 源资源模块的后缀
        name: "[name]_[hash].[ext]",
        //打包后的存放位置
        outputPath: "./images"
        // 打包后文件的 url
        publicPath: './images',
        // 小于 100 字节转成 base64 格式
        limit: 10000
      }
    }
	}
]

3.打包:./node_modules/.bin/webpack

注意:图片大于limit 设置的大小,就不会变成base64字符串,小于设置的大小就会在打包的文件中显示图片错误,变成字符串;如果变成字符串,图片就销毁了,想要再次使用必须把整个url-loader都注释;

3-5 css-loader

分析 css 模块之间的关系,并合成⼀个 css

1.安装:

npm install --save-dev css-loader

2.然后在 webpack.config.js 中进行配置:

rules: [
  ...,
	{
		test: /\.css$/,
    use: {
      loader: "css-loader",
      options: {
  			// 启用/禁用 url() 处理  true 图片可以平铺  false就显示一张图
  			url: true,
  			// 启用/禁用 @import 处理
  			import: true,
        // 启用/禁用 Sourcemap
        sourceMap: false
      }
    }
]

3.在src/cs.css

body{
    background:cyan;
}

4.index.js

import  cs  from "./cs.css";
console.log(cs[0][1]);  //js文件写的内容 body{background:cyan}
let sty=document.createElement('style');  //创建style标签
sty.innerHTML=cs[0][1]            //把输出的内容放到style中
document.head.appendChild(sty);   ////添加到header中

5.打包:./node_modules/.bin/webpack

6.运行:html 背景变成cyan颜色;

3-6 style-loader

把 css-loader 生成的内容,用 style 标签挂载到⻚面的 head 中

1.安装:

npm install --save-dev style-loader

2.然后在 webpack.config.js 中进行配置:

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

3.cs.css

body{
    background:cyan;
}

4.index.js

import  cs  from "./cs.css";
console.log(cs); 

5.打包:./node_modules/.bin/webpack

6.运行: html 背景颜色变成cyan颜色

  1. use: [“style-loader”, “css-loader”]解析:

同一个任务的 loader 可以同时挂载多个,处理顺序为:从右到左,也就是先通过 css-loader 处理,然后把处理后的 css 字符串交给 style-loader 进行处理

代码示意:

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

3-7 sass-loader

1.解释:1把 sass 语法转换成 css ,依赖 node-sass 模块
2安装:

npm install --save-dev sass-loader node-sass

3.在webpack.config.js在里配置:

module.exports = {
				.............,
				module:{
					rules:[
						{test:/\.scss/,
                         use:["style-loader","css-loader","sass-loader"]
                        }
					]
				}
			}

4.打包:./node_modules/.bin/webpack

5.Plugins(插件)

解析plugins:

扩展 webpack 本身的一些功能,它们会运行在各种模块解析完成以后的打包编译阶段,比如对解析后的模块文件进行压缩等里面有很多插件;

5-1 HtmlWebpackPlugin

1.解释:在打包后,会自动生成html文件,并且会把打包生成的js也引进去.

2.安装:

npm install --save-dev html-webpack-plugin

3.在webpack.config.js里面配置

const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports={
	...
	  //插件
    plugins:[
        new HtmlWebpackPlugin({
            title:"my  App",
            filename: "app.html",   //打包后的名字
            template: "./public/index.html"  //原文件的文件路径

        }) 
    ]
}
  1. .public//index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%=htmlWebpackPlugin.options.title%></title>
</head>
<body>
    
</body>
</html>

5.打包: ./node_modules/.bin/webpack

6.运行 html文件

注意:在 html 模板中,可以通过 <%=htmlWebpackPlugin.options.XXX%> 的方式获取配置的值

5-2clean-webpack-plugin

1 .解释:每次打包前都把之前的内容删除了,只留当前刚打包的文件

2.安装:

npm install --save-dev clean-webpack-plugin

3.在webpack.config.js里面配置

const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports={
     output:{
        path:path.resolve(__dirname,'dist'),
        filename:"public/js/app.js"
    },
    moudle:{
        reles:[
             {
                test: /\.(png|jpe?g|gif)$/i, 
                use:{
                    loader:'file-loader',
                    options:{
                        //都是占位符
                        //'[path] : 路径
                        //[name]   : 文件名
                        //.[ext]   :后缀
                      //  name: "[path][name].[ext]",
                          //打包后的存放位置
                          //相对的是全局的outputPath
                        outputPath: "/public/image",
                         // 打包后文件的 url
                        publicPath: './public/image',
                        }
                    } 
            },
        ]
    }
    plugins:[
       plugins:[
        new HtmlWebpackPlugin({
            title:"my  App",
            filename: "app.html",   //打包后的名字
            template: "./public/index.html"  //原文件的文件路径

        }),
           new CleanWebpackPlugin(),
        ]
}
 

4.打包: ./node_modules/.bin/webpack

5.运行 html 效果:把压缩后的文件放在dist/public/index.html dist/public/js/index.js 把图片放在dist/public/image

5-3 mini-css-extract-plugin

1 提取 CSS 到一个单独的文件中

2 安装:

npm install --save-dev mini-css-extract-plugin

3 在webapck.config.js里配置:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports={
    module:{
        reles:[
            {
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                ],
            }
        ],
        //插件
        plugins:[
            new MiniCssExtractPlugin({
            filename: 'public/css/app.css'  //打包完在public/css/app.css
        }),
        ]
    }
 
    
}

4 cs.css

body{
    background:cyan;
    /* background:url('../src/data/a.png'); */
     background:url('./data/a.png')    找到打包前图片的路径

}

5 打包: ./node_modules/.bin/webpack

6 运行:html

6.WebpackDevServer(热更新)

1.解释:每次代码写完都要重新打包,浪费时间,换需要多次刷新浏览器,可以通过安装webpackdevserver来解决;

2.安装:

npm install --save-dev webpack-dev-server

3.在package.json里配置:

"script":{
     "server": "webpack serve --open"
}

4.在webpack.config.json配置

moudule.exports={
   ...
     devServer: {
        // 生成的虚拟目录路径
        contentBase: "./dist",
          openPage:'app.html',
          //打开网站时所在的页面
         index:'app.html',
        // 自动开启浏览器
        open: true,
        // 端口
        port: 8080
      }
}

注意:config.json 文件修改之后需要重新启动项目,才会生效; openPage:‘app.html’,和index:‘app.html’, 任意写一个会自动下载一些小的东西所以最好两个一起用

在终端运行:npm run server 直接出现一个端口页面

7. Hot Module Replacement:

1.解释: 当代吗发生变化是,使用live reload 会刷新整个页面,这样会节省了手动刷新的时间,但是如果只刷新一部分内容,但是他整个页面都会重新刷新.Hot Module Replacement:的核心就是局部更新,不会全部刷新,只会改我们要改的地方;

2.webpack.config.json配置

module.exports = {
  ...,
  devServer: {
  	// 生成的虚拟目录路径
  	contentBase: "./dist",
  	// 自动开启浏览器
  	open: true,
  	// 端口
  	port: 8081,
  	// 开启热更新
  	hot:true,
  	// 即使 HMR 不生效,也不去刷新整个页面(选择开启)
    hotOnly:true,
  	proxy: {
      '/api': {
      	target: 'http://localhost:8787'
    	}
    }
	}

3.运行: npm run server

注意当入口文件发生改变,整个热面不全部重新刷新,只会局部刷新,页面不会产生闪烁问题
总结:
我学到了loader是为了解析解决除了js其他类型的文件而出来的;
loader特别强大,只需要安装,配置,打包就可以解决;
还学习了插件,插件对前端的作用真的太大了,减轻了技术人员的压力;

Webpack中Loader和Plugin的区别 LoaderLoader 是用于处理和转换模块的工具。它将非 JavaScript 文件(如 CSS、图片、TypeScript 等)转换为可以被 JavaScript 处理的模块。主要用于文件的预处理和转换。PluginPlugin 是用于扩展 Webpack 功能的工具,可以在构建过程中执行各种任务,如优化构建、管理输出文件、注入环境变量等。主要用于执行更复杂的操作和构建过程的管理。Loader 和 Plugin 是 Webpack 中不可或缺的两个组件。 阅读详情

相关推荐

md-loader:一款使用webpack开发的用于markdown文件转换的loader

md-loader 一款使用webpack开发的用于markdown文件转换的loader webpack快速上手 初始化package.json webpack为npm的工具模块 yarn init --yes yarn add webpack webpack-cli --dev 或者写入package.json的scripts中 使用yarn build yarn webpack yarn build

webpack使用raw-loader内联静态资源失效

raw-loader内联静态语法应html-webpack-plugin导致失效的解决方案。

weixin_43877368的博客 414

AGM Supra软件从零到一:国产CPLD工程创建全流程拆解

本文详细拆解了AGM Supra软件从零开始创建国产CPLD工程的全流程,包括开发环境配置、工程创建、Quartus项目转换、TCL脚本执行与编译等关键步骤。特别强调了中文路径避坑、器件型号选择等实用技巧,帮助开发者高效完成CPLD开发任务。

weixin_29158413的博客 410

轻装上阵:Webpack 5 & Vite资源优化

本文通过一个最小的Webpack和vite项目demo,举例演示了在webpack5中采用内置属性将静态资源模块以不同形式导出,并且说明了在vite中如何处理静态资源模块。

m0_46259935的博客 1107

永磁同步电机高效标定技术:从理论到实践的全面解析

本文全面解析永磁同步电机高效标定技术,从MTPA标定、弱磁区优化到初始角校准,详细介绍了理论原理和实战技巧。针对新能源汽车应用场景,提供标定系统集成要点和AI辅助优化方案,帮助工程师提升电机性能标定效率与精度。

weixin_28452161的博客 503

使用pytorch构建LSTM_AE模型的两种方式

2.基本LSTM_Unit计算——基本LSTM_AE结构 3.自定义LSTM_Unit计算——自定义LSTM_AE结构 1.LSTM-Encoder-Decoder模型结构及简要解析 图基本lstm计算单元

qq_37840762的博客 7275

Webpack 插件 raw-loader,可将代码文件导出为字符串模板

webpack的加载程序,允许将文件作为字符串导入。

前端技术 2382

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用

本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。

l3m4n的博客 429

raw-loader 使用教程

`raw-loader` 是一个开源的 Webpack 加载器,允许你将文件作为字符串导入。它可以将任何文件内容转换为 JavaScript 模块,主要用于加载文本文件,如 `.txt`、`.md` 等。 ## 项目快速启动 ### 安装 首先,你需要安装 `raw-loader`: ```bash npm install raw-loader --save-dev ``` ### 配置...

gitblog_00999的博客 1133

OpenBCI脑电实验避坑指南:如何用Python准确捕捉P300信号

本文详细介绍了使用OpenBCI和Python进行P300脑电信号实验的避坑指南,包括电极贴放、信号采集、信号处理和数据分析等关键步骤。通过实战经验和代码示例,帮助研究者避开常见陷阱,提高P300信号捕捉的准确率,适用于脑机接口和神经科学研究。

weixin_30316097的博客 553

PyRoki:机器人运动学优化库入门教程

PyRoki:模块化机器人运动学优化工具包 本文介绍了PyRoki,一个模块化、可扩展且跨平台的机器人运动学优化工具包。PyRoki通过统一变量和成本函数接口,简化了逆运动学、轨迹优化和运动重定向等任务的实现,支持CPU、GPU和TPU加速。实验表明,PyRoki在批量逆运动学任务中比现有GPU加速库cuRobo快1.4-1.7倍,且收敛误差更低。其模块化设计支持快速集成新成本函数,并通过交互式可视化工具优化参数配置。PyRoki开源发布,为机器人运动优化提供了灵活高效的解决方案。

机器人控制与仿真应用 1293

webpack里的loader是什么,干嘛的,webpack和loader是什么关系?

1.首先,webpack干嘛的?看图: webpack就是打包的,就不啰嗦啦 2.那loader是什么玩意儿?在weboack的世界里,干了点什么? 先看看官网的解释,【https://www.webpackjs.com/concepts/#loader】 官网说了:loader让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 we.

paopaosama的博客 3651

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device, Quartus的安装过程不同于ISE/vivado的安装。“Current license file does not support”这种情况多出现在高版本的quartus中综合很久以前的代码,使用很早型号的FPGA或是CPLD。对于这种情况,就得在官网或是其他网站上下载包含所需Device的库文件。

夜半少年的博客 1万+

vue文件里在style的样式需要什么loader_webpack编译loader大全

在前端开发中,除了熟练使用框架,我们还要使用一样技术就是webpack,webpack相信很多小伙伴都多少有些了解,但是很多人可能对webpack不是特别熟练,只是知道基本的loader配置,甚至自己配置了loader都不知道这个loader的作用。我也曾经遇到过这样的问题,但是各种百度和google都没能找到特别全的loader介绍,所以我花一些时间整理了所有的loader终于解决了自己的痛点,...

weixin_39528029的博客 436

2025年CSP-X初赛真题及答案解析(江西)(完善程序第1题)

2025年CSP-X初赛真题及答案解析(江西)(完善程序第1题)

王老师青少年编程 714

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

webpack里的url-loader中limit作用

webpack里的url-loader中limit作用 将小的,即低于limit的图片进行base64编码,以减少http请求 将图片文件转换为base64编码并载入浏览器能够减少http请求数,但是增大了js或html文件的体积,如果图片在项目中的重用度较高,那么每处引用都会生成base64编码,造成了代码的冗余。通过http请求载入到浏览器的文件可以缓存到本地,当图片在项目中的重用度...

岁月如歌去,十年弹指间 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

vue文件里在style的样式需要什么loader_Webpack的核心概念-loader与plugin

1. Webpack的loader1.1 问题引入之前的项目中我们打包的对象都是JS文件,那假设我们需要import一个图片应该怎么做呢,如果仍然使用之前的方式进行打包就会报错:Module parse failed:Unpexpected character ...很明显webpack不能识别图片文件,这里就需要借助loader来告诉webpack如何打包图片文件了1.2 loader是什么Lo...

weixin_39664585的博客 184

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vue文件里在style的样式需要什么loader_webpack 常见loader原理剖析,动手实现一个md2html的loader

本文会带你简单的认识一下webpack的loader,动手实现一个利用md转成抽象语法树,再转成html字符串的loader。顺便简单的了解一下几个style-loader,vue-loader,babel-loader的源码以及工作流程。loader简介webpack允许我们使用loader来处理文件,loader是一个导出为function的node模块。可以将匹配到的文件进行一次转换,同时l...

weixin_39975683的博客 246

webpack使用html-loader打包html里图片报错

标题if (!scriptUrl) throw new Error(“Automatic publicPath is not supported in this browser”); 原因:url-loader默认使用es6,而html-loader把html里面的图片转成了common.js。所有不能被url-loader识别 解决方案: 1.在url-loader配置里面添加 esModule:false { //问题:处理不了html里面的图片

mywxtjj的博客 1488

Vue/React项目里axios报‘Module parse failed’?别慌,可能是Webpack配置里少了这个关键loader

本文深入解析Vue/React项目中axios报'Module parse failed'错误的根本原因及解决方案。针对Webpack配置中缺少关键loader导致无法转译node_modules/axios内ES6+代码的问题,提供了三种精准配置方案,并对比了不同方案的性能与适用场景,帮助开发者彻底解决这一常见构建错误。

cuanchuwei1207的博客 367

vue文件里在style的样式需要什么loader_Vue学习笔记之Webpack中css、less、图片等文件处理...

一、webpack中使用css文件:loader是webpack中一个非常核心的概念,去转化webpack不能转化或打包的文件。安装loader:官网介绍:安装: cnpm install --save-dev css-loaderloader配置:然后再进行打包动作:npm run buildPS:css-loader只负责将css文件进行加载,所以还需要style-loader负责将样式添加到...

weixin_39715997的博客 321

记一个webpack loader顺序没写对的报错

记一个webpack loader顺序没写对的报错 发现配置了loader还是报错 查阅后发现loader书写规则错误引起的 改成如下打包成功 总结:在webpack中,loader的执行顺序是从右到左,从下到上,stylus-loader处理好stylus文件后向上传递给css-loader处理css文件,再向上传递给style-loader处理style文件,每个loader互不影响,各...

nightwishh的博客 495

webpack中使用loader加载css、less、sass样式

目的:因为传统的link加载css样式会发起二次请求,所以我们需要在webpack中使用loader加载css样式 准备:你需要准备一个已经配置好的webpack项目:https://blog.youkuaiyun.com/Tomwildboar/article/details/82141824 配置cssloader  第一步:安装相对应的插件 (cnpm i style-loader css-loa...

小道仙的后宫 1531

webpack.config.js用来写测试的基本配置,引入了css-loader以及typescript

一个较为通用的webpack.config.js配置 本小白在学习菜鸟教程的webpack教程时,照着教程上面写会报很多错,解决了这个错误还会有下一个错误,简直是没完没了,一直在百度,解决了几个bug之后发现了这个 本章节基于 Webpack3.0 测试通过。 突然想打人… 现在的版本基本上是4.35,在node下输入"webpack -v"就可以查看版本号,所以有些东西就不兼容了,于是就到w...

js_push的博客 886

前端学习案例2-webpack什么是loader

前端

qq_41632427的博客 111

在js里拼接了html 但是样式不显示了怎么办_Webpack4 学习 - 03:loader 打包静态资源(样式)...

使用 style-loader,css-loader 打包 css 文件首先在src目录下创建一个 index.css 文件,内容如下:.this_style { color: red;}修改 index.js 文件内容如下:import './index.css';var root = document.getElementById('root');var wp = document.creat...

weixin_28630185的博客 722
上一篇: 介绍webpack
下一篇: 基础小白学会安装Git
starry__sty
博客等级 码龄6年 30粉丝 120原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值