【例子】webpack 开发一个可以加载 markdown 文件的加载器 loader 案例

Loader 作为 Webpack 的核心机制,内部的工作原理却非常简单。接下来我们一起来开发一个自己的 Loader,通过这个开发过程再来深入了解 Loader 的工作原理。
这里我的需求是开发一个可以加载 markdown 文件的加载器,以便可以在代码中直接导入 md 文件。我们都应该知道 markdown 一般是需要转换为 html 之后再呈现到页面上的,所以我希望导入 md 文件后,直接得到markdown 转换后的 html 字符串。

首先来说一下实现的简单步骤

1、新建一个项目,并且在命令行中初始化项目   npm init -y2、安装对应版本的 webpack webpack-cli(命令行工具) "webpack""webpack-cli"3、安装对应版本的 marked 库4、在 src 目录下创建 about.md 文件,并写入 markdown 语法内容5、在 src 目录下创建 main.js 文件,将 about.md 文件引入6、在根目录下创建markdown-loader.js 文件,写入自己配置 loader 的逻辑7、在根目录下创建一个 webpack.config.js 配置文件,并设置loader8、在命令行中运行 webpack 来打包9、打包完成后,生成的 bundle.js 文件将 markdown 文件转换成 html 字符串,可以被浏览器执行

 下面是具体步骤

一、新建项目

1、新建一个文件夹,然后用 vs-code 打开新建好的文件夹,如:

2、打开终端,输入命令对项目进行初始化(默认这里认为已经安装好了node.js

npm init -y

运行完这个命令之后,项目中会新增一个 package.json 的文件

二、安装 webpack

打开终端,在你的项目中安装 Webpack 和 Webpack CLI(命令行工具),如:

npm install --save-dev webpack webpack-cli

三、安装 marked

这里需要安装一个能够将 Markdown 解析为 HTML 的模块,叫作 marked

npm install marked

安装完成后,项目中的 package.json 文件中就会出现如下配置

 四、创建 markdown 文件

创建一个 about.md 文件,并在文件中写入如下代码:

五、创建入口文件

创建一个 main.js 文件,并在文件中导入 about.md 文件,如下:

六、配置自己的 markdown-loader

在根目录下创建一个 markdown-loader.js 文件,并在文件中配置如下代码

const marked = require('marked')
module.exports = source => {const html = marked.parse(source)const code = `module.exports = ${JSON.stringify(html)}`return code
}

七、配置 webpack

在项目根目录下创建一个 webpack.config.js 配置文件,并做如下配置

const path = require('path');module.exports = {entry: './src/main.js', // 你的入口文件output: {path: path.resolve(__dirname, 'dist'), // 输出的目录filename: 'bundle.js' // 输出的文件名},module: {rules: [{test: /\.md$/,exclude: /node_modules/,use: ['./markdown-loader']}]},mode: 'none'
};

八、打包

在终端运行 webpack 来打包应用程序

npx webpack

九、运行

打包完成后,生成的 bundle.js 文件将 markdown 文件转换成 html 字符串,可以被浏览器执行。

这里只是对它做了打印处理

以上就是开发一个可以加载 markdown 文件的加载器 loader 的全部代码了,这只是 webpack 的一个应用,实际开发过程中我们还可以通过自己的业务需求配置自己的 loader,更多关于 webpack 的应用我在后续也会持续更新,有兴趣的小伙伴可以关注一下!!!

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

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

相关文章

软考系统架构师系统工程与信息系统基础考点

软考系统架构师系统工程与信息系统基础考点 系统工程 定义:一种组织管理技术,一种现代的科学决策方法 目的:以最好的方式实现系统 目标:整体最优 意义:利用计算机为工具,对系统的结构、元素、信息和反馈…

网络流-EK算法(保姆级教学)

本文引用董晓算法的部分图片。 一些不能带入纸质资料的竞赛,网络流纳入考纲。 因为需要默写,想来也不会考默写dinic这种算法难倒大家,只需要快速敲对EK算法就行了。 EK算法能在O(n*m^2)的复杂度内解决最大流问题,其中最大流就是…

wpf 附加属性 RegisterAttached 内容属性

// // 摘要: // 选中时展示的元素 public static readonly DependencyProperty CheckedElementProperty DependencyProperty.RegisterAttached("CheckedElement", typeof(object), typeof(StatusSwitchElement), new PropertyMetadata((object)null…

java加载文件初始化数据

对于一些数据量不大的配置类数据,放到数据库中占用数据库资源,可以放到代码中维护。比如 (1)字段少业务单一:做成枚举; (2)字段多业务复杂:则可以放到文件中维护&#…

【Linux小命令】一文讲清ldd命令及使用场景

一文讲清ldd命令及使用场景 前言下面进入正题:ldd命令 前言 博主今天ubuntu编译go项目出来的一个可执行文件,放centos运行发现居然依赖于XXlib库。然后我一下就想到两个系统库版本不一致,重编。换系统,导项目,配环境……

从新手到高手:彻底掌握MySQL表死锁

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 从新手到高手:彻底掌握MySQL表死锁 前言什么是死锁mysql死锁的原因1. 互斥资源的竞争…

备份操作系统

在VMware中备份方式:快照和克隆 1.快照:短期备份,频繁备份 快照:又称还原点,就是保存在拍照时,系统状态。在后期的时候可以恢复 2.克隆:长期备份 克隆:就是复制的意思&#xff0…

maven仓库的作用以及安装 , DEA配置本地Maven

ay12-maven 主要内容 Maven的作用Maven仓库的作用Maven的坐标概念Maven的安装IDEA配置本地Maven 一、maven概述 1.1、项目开发中的问题 1、我的项目依赖一些jar包,我把他们放在哪里?直接拷贝到项目的lib文件夹中?如果我开发的第二个项目还是需要上面…

网管工作实践_02_IP/MAC地址管理工具

1、ipconfig命令格式及参数 ipconfig是内置于Windows的TCP/IP应用程序,用于显示本地计算机网络适配器的MAC地址和IP地址等配置信息,这些信息一般用来榆验手动配置的TCP/IP设置是否正确。当在网络中使用 DHCP服务时,IPConfig可以检测计算机中分…

006 动态数组(lua)

文章目录 初步准备实际应用 在Lua中,没有类的概念,因为它是基于原型的语言。不过,我们可以使用表(table)来模拟类和对象 Lua中的数组索引是从1开始的,而不是从0开始, Lua的表是动态大小的&#…

DigitalOcean 推出 Opensearch 托管服务,易用且强大的日志洞察与分析工具

DigitalOcean 宣布推出 DigitalOcean 的 Opensearch托管服务,这是一款专为深入的日志分析、简化故障排查和优化应用性能而设计的全面的解决方案。 简单介绍一下 Opensearch 这里先给不了解 Opensearch 的用户简单介绍一下。OpenSearch 是从 Elasticsearch 的一个相…

提升网络速度的几种有效方法

在数字化时代,网络速度对于我们的日常生活和工作至关重要。无论是观看高清视频、在线游戏,还是进行视频会议,快速稳定的网络连接都是不可或缺的。如果你发现自己当前的网络速度不尽如人意,那么不妨尝试以下几种方法来提升它。 升…

6.26.8 基于多视角深度卷积神经网络的高分辨率乳腺癌筛查

1. 介绍 1.1 乳腺癌筛查 开发了一种新的DCN,它能够处理乳房x线摄影筛查的多个视图,并利用大分辨率图像而不缩小。将这种DCN称为多视图深度卷积网络(MV-DCN)。网络学习预测放射科医生的评估,将传入的样本分类为BI-RADS 0(“不完整”)&#xf…

网络问题排障专题-AF网络问题排障

目录 一、数据交换基本原理 1、ARP协议工作原理 数据包如图: 2、二层交换工作原理 简述核心概念: 二层交换原理-VLAN标签 3、三层交换工作原理 二、AF各种部署模式数据转发流程 1、路由模式数据转发流程 三、分层/分组逐一案例讲解 1、问题现…

对于 PHP 开发的 Web 应用,怎样有效地防止 SQL 注入攻击?

防止 SQL 注入攻击是在 PHP 开发的 Web 应用中非常重要的安全措施之一。下面是一些有效的防止 SQL 注入攻击的方法: 使用参数化查询和预处理语句:使用参数化查询能够将用户输入的数据与 SQL 查询分离,从而避免 SQL 注入攻击。使用预处理语句可…

免费分享一套SpringBoot+Vue在线水果(销售)商城管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue在线水果(销售)商城管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue在线水果(销售)商城管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue在线水果(销售)商…

Android高级面试_8_热修补插件化等

Android 高级面试:插件化和热修复相关 1、dex 和 class 文件结构 class 是 JVM 可以执行的文件类型,由 javac 编译生成;dex 是 DVM 执行的文件类型,由 dx 编译生成。 class 文件结构的特点: 是一种 8 位二进制字节…

探索Facebook的未来世界:数字社交的演进之路

在数字化和全球化的浪潮中,社交网络如Facebook已经成为了人们日常生活不可或缺的一部分。然而,随着技术的迅猛发展和用户需求的不断变化,Facebook正在经历着社交平台的演进之路。本文将探索Facebook的未来世界,分析数字社交的发展…

CP AUTOSAR标准之KeyManager(AUTOSAR_CP_SWS_KeyManager)(更新中……)

1 简介和功能概述 该规范描述了AUTOSAR基础软件模块< KeyManager >的功能、API和配置。   AUTOSAR KeyM模块由两个子模块组成,即加密密钥子模块和证书子模块,如[1]“AUTOSAR对加密堆栈的要求”所要求。   加密密钥子模块提供API和配置项来引入或更新预定义的加密密…

技术选型新趋势:中小型企业如何选用高效CRM“小型应用”进行客户管理

众所周知&#xff0c;CRM应用通过优化客户信息管理、提升销售效率、提高客户服务质量、实现市场营销自动化以及支持数据分析与决策等方面&#xff0c;为企业创造更大的价值&#xff0c;提升企业的竞争力和市场份额。 对初创型、中小型企业来说&#xff0c;使用合适的CRM应用至…