Webpack原理与实战 --- 如何通过 Loader 实现特殊资源加载

news/2024/11/17 7:37:01/

前言

Webpack 不仅是 JavaScript 模块打包工具
还是整个前端项目(前端工程)的模块打包工具
可以通过 Webpack 去管理前端项目中任意类型的资源文件

如何加载资源模块

将 Webpack 配置中的入口文件路径指定为 main.css 的文件路径
让 Webpack 直接打包 CSS 资源文件

module.exports = {// 样式文件路径entry: './src/main.css',output: {filename: 'bundle.js'}
}

在这里插入图片描述
在这里插入图片描述

加载器的使用方式

通过 npm 先去安装这个 Loader
在配置文件中添加对应的配置

$ npm install css-loader --save-dev 
# or yarn add css-loader --dev
// ./webpack.config.js
module.exports = {entry: './src/main.css',output: {filename: 'bundle.js'},module: {rules: [{test: /\.css$/, // 根据打包过程中所遇到文件路径匹配是否使用这个 loaderuse: 'css-loader' // 指定具体的 loader}]}
}

在这里插入图片描述

样式模块加载的问题

如果你尝试在页面中使用这里输出的 bundle.js 文件
你会发现刚刚的这个 main.css 模块并没有工作
解法只需要再额外添加一个 style-loader,样式就可以正常工作了

样式没有生效的原因是: css-loader 只会把 CSS 模块加载到 JS 代码中,而并不会使用这个模块。

安装完 style-loader 之后,我们将配置文件中的 use 属性修改为一个数组,将 style-loader 也放进去。
一旦配置多个 Loader,执行顺序是从后往前执行的

// ./webpack.config.js
module.exports = {entry: './src/main.css',output: {filename: 'bundle.js'},module: {rules: [{test: /\.css$/,// 对同一个模块使用多个 loader,注意顺序use: ['style-loader','css-loader']}]}
}

为什么要在 JS 中加载其他资源

假设我们在开发页面上的某个局部功能时,需要用到一个样式模块和一个图片文件
如果你还是将这些资源文件单独引入到 HTML 中,然后再到 JS 中添加对应的逻辑代码
试想一下,如果后期这个局部功能不用了
你就需要同时删除 JS 中的代码和 HTML 中的资源文件引入,也就是同时需要维护两条线
而如果你遵照 Webpack 的这种设计,所有资源的加载都是由 JS 代码控制
后期也就只需要维护 JS 代码这一条线了

开发一个 Loader

每个 Webpack 的 Loader 都需要导出一个函数,这个函数就是我们这个 Loader 对资源的处理过程,它的输入就是加载到的资源文件内容,输出就是我们加工后的结果。
我们通过 source 参数接收输入,通过返回值输出。
最终管道结束过后的结果必须是一段标准的 JS 代码字符串

// ./markdown-loader.js
const marked = require('marked')module.exports = source => {// 1. 将 markdown 转换为 html 字符串const html = marked(source)// html => '<h1>About</h1><p>this is a markdown file.</p>'// 2. 将 html 字符串拼接为一段导出字符串的 JS 代码const code = `module.exports = ${JSON.stringify(html)}`return code // code => 'export default "<h1>About</h1><p>this is a markdown file.</p>"'
}

http://www.ppmy.cn/news/933695.html

相关文章

maven项目使用java命令行运行类的main方式示例

因为需要测试一个东西,本地测试无问题,测试环境一直有问题,就想在测试环境测试下 直接写了个测试类,main方法直接运行测试逻辑 测试类写好,发现自己不会使用命令行运行 运行测试类一直报"错误: 找不到或无法加载主类" 折腾好久,终于找到两个帖子 记录下来,避免自己下…

html5对电脑配置要求,渲染对电脑的配置要求

无论是 图形、3D还是视频的渲染或者编辑 我们用的民用显卡核心都基本起不了作用 唯一就在显卡与显示器的显示效果与色彩还原度有一定效果 都是考验CPU核心的硬解能力与内存的读取速度 另外主板及硬盘乃至整机系统的整体性能也有一定的关系 所以只是要做3D的渲染与编辑的话 可以…

暗黑3的开发人员

具体信息&#xff0c;没找到。找到一个暗黑3的招聘广告。 翻译过来是这样&#xff1a;找一个高级软件工程师加入暗黑3团队&#xff0c;有开发、优化大型游戏系统的经验。公司提供一个有趣的&#xff0c;创新的&#xff0c;有技术挑战的&#xff0c;待遇很高的岗位。要求&#…

攻击载荷、木马、蠕虫、感染型病毒,你了解多少?

恶意程序是指数字世界中带有攻击意图的程序实体&#xff0c;通常可以分为攻击载荷、木马、蠕虫、感染型病毒。 1.攻击载荷 攻击载荷是指攻击者发起初始攻击并建立网络连接的武器载体&#xff0c;按照功能可以分为投递攻击类、连接控制类、独立攻击类。 投递攻击类有远程攻击类…

东芝L10安装Centos5.5

为什么安装5.5&#xff1a;因为高版本的需要PAE设定但是老电脑不支持&#xff0c;偶又不想重新编译内核&#xff0c;so。。。 1. 安装之前需要把电脑格式化&#xff08;我是整机安装Linux&#xff09;&#xff0c;否则会报not enough space left to create partition for /boo…

计算机用老毛桃u盘备份系统,使用U盘备份系统

1. 下载路径:“http://url.cn/Wjvetq”→点击下载【LaoMaoTao_V2013UEFI】&#xff1a; 2. 插入U盘(请事先将U盘中的资料进行备份)&#xff0c;双击打开老毛桃→点击【一键制作程USB启动盘】&#xff1a; 3. 备份好U盘里的资料后&#xff0c;点击【确定】(ps:本机的D盘为U盘盘符…

window10保存文件时提示联系管理员_东芝2000AC扫描文件到远程域共享服务器

一、需求描述 客户一台东芝2000AC一体机,想将扫描的文件,扫描到公司的一台共享远程域共享服务器中,共享服务器采用的域管理,而且域共享采用的是不允许管理员登录访问,只有普通用户访问,管理员权限在管理员手中,由于某种原因不外泄。 二、远程扫描配置 1、登录东芝2000AC…

东芝半导体最新ARM开发板——TT_M3HQ开箱评测

文章目录 前言关于TT_M3HQ关于东芝的MCU产品TT_M3HQ开箱爆照TT_M3HQ PCB工艺TT_M3HQ板载资源TT_M3HQ细节特写TT_M3HQ硬件框图及接口定义TT_M3HQ开发环境搭建1.TT_M3HQ支持的开发环境2.安装芯片DFP器件包3.下载官方SDK4.导入点灯示例工程5.下载验证 相关资料下载推荐阅读写在最后…