Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于 Taro 的微信小程序开发实战:如何支持高亮代码块

基于 Taro 的微信小程序开发实战:如何支持高亮代码块

作者头像
用户6901603
发布于 2024-04-19 03:10:50
发布于 2024-04-19 03:10:50
47900
代码可运行
举报
文章被收录于专栏:不知非攻不知非攻
运行总次数:0
代码可运行

如果我们想要开发一款程序员使用的社区小程序,那么对 markdown 格式的解析与渲染是一个非常重要的功能。不过要完善的支持 .md 格式,在微信小程序中并不是一件容易的事情。好在微信小程序目前已经支持 html 标签渲染,因此我们有许多的 web 方案可以借鉴。

我实现的最终的效果如上图所示。引入成功,并且在真机测试通过。接下来具体跟大家分享一下实现步骤。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 我的开发环境
Taro 3.6.6
Node 16.19.1

0

支持引入 .md 文件

正常情况下,我们应该从接口中获取到当前文件的 markdown 内容,不过偶尔也需要支持本地 .md 文件的渲染,因此首先我们要在工程里支持引入 .md 文件

首先支持如下操作,引入 raw-loader

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pnpm add raw-loader

然后在工程配置文件中 config/index.ts 新增如下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = {
  // ...
  mini: {
    // ...
    webpackChain(chain, webpack) {
      chain.merge({
        module: {
          rule: {
            myloader: {
              test: /\.md$/,
              use: [
                {
                  loader: 'raw-loader',
                  options: {},
                },
              ],
            },
          },
        },
      })
    },
  },
}

由于我的项目中使用了 ts,因此直接引入 .md 文件还会报错。

types/global.d.ts 中,新增 md 文件的配置即可解决该问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
declare module '*.scss';
declare module '*.sass';
declare module '*.styl';
+ declare module '*.md';

1

引入 markdown 解析器

我使用了一款名为 wemark 的 Markdown 渲染库。不过由于年久失修,如果按照该作者的方式直接使用的话会有一些问题。因此请尽量按照我的步骤来在项目中配置

1、首先我们需要下载该项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/TooBug/wemark.git

2、然后将该项目中的文件 wemark 复制到 Taro 项目中 src 目录中。

3、设置编译时复制 wemark 目录。修改 config/index.ts,在 copy 设置项中增加 wemark

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
copy: {
  patterns: [
    {
      from: 'src/wemark',
      to: 'dist/wemark',
    },
  ],
  options: {}
},

我们可以通过如下方式在页面中引入 wemark,创建页面时,我们会创建一个 index.config.ts 的文件,使用 usingComponents 配置好

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default definePageConfig({
  navigationBarTitleText: '代码块高亮',
  navigationStyle: 'default',
  usingComponents: {
    wemark: '../../wemark/wemark'
  }
})

这样我们可以直接在页面中使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { View } from '@tarojs/components'
import code from './code.md'
import './index.scss'

function Parse() {
  return (
    <View>
      <wemark md={code} link highlight type='wemark' />
    </View>    
  )
}

export default Parse

我们可以在 src/wemark/wemark.wxss 中,修改渲染之后的样式。

调整好之后,样式如下

目前已基本完成,但是字体有点不好看,因此我们需要引入一个专门用来展示代码的等宽字体,这里我们引入的是 SF Mono

2

引入自定义字体

在微信小程序中引入自定义字体也并非易事。

我们可以使用它官方文档中提供的方案通过网络地址来引入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.loadFontFace({
  family: 'FZSuXSLSJW',
  source: 'url("https://we7.stuyun.com/FZSuXSLSJW.ttf")',
  success: res => {
    console.log('font load success', res)
  },
  fail: err => {
    console.log('font load fail', err)
  }
})

但是这种方案有一些不太爽的限制,该地址必须与小程序同源,或者设置了可以跨域访问。并且不支持本地的字体文件。

因此我们只能通过把字体文件转成 base64 的格式,然后通过 @font-face 来自定义字体。

transfonter.org 可以免费的帮助我们将字体文件转换成 base64

拿到对应字体的 base64 之后,然后自定义样式即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@font-face {
  font-family: 'SFMono';
  src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYhof28AAoBMAAAAHE....
}

最后,在src/wemark/wemark.wxss 中,给代码块设置样式属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.wemark_block_code{
  font-family: SFMono;
  ...
}

搞定!

3

按需加载

微信小程序对包体积有严格的限制。这样处理之后,包体积可能会有点大。字体文件有接近 200k,remark 也不小。因此我们还需要进一步做优化

仔细观察 wemark 文件,我们发现他其实是基于 remark 实现的一个自定义小程序组件。

因此,我们可以把自定义字体的样式写在 wemark.wxss 中,然后将该组件设置为按需引入,那么在小程序启动时,就可以不用加载该组件。

微信小程序目前已经支持了按需引入。在 wemark.json 中,添加如下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "lazyCodeLoading": "requiredComponents"
}

4

总结

因为微信小程序现在已经支持 html 标签的渲染,因此我们有很多在 web 上能使用的方案也能运用于小程序中,但是由于微信小程序对打包体积有限制,因此,功能验证成功之后,要多考虑这方面的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这波能反杀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小程序开发总结02 - 开发技巧和第三方插件的使用
es6的Promise让异步接口的处理变得轻松,在旧版本的小程序中并不原生支持Promise,需要引入第三方库,例如:https://github.com/stefanpenner/es6-promise,然而在新版的小程序中已经原生支持了Promise,直接使用即可。
CS逍遥剑仙
2018/06/23
3K1
小程序开发总结02 - 开发技巧和第三方插件的使用
干货 | Taro 开发微信小程序入门与实战
如果你是 Vue 开发者,但又不想过多的折腾,继续沿用 Vue 的开发方式来开发小程序,那么用 mpvue 将会是你的最明智的选择。同时也支持一些第三方 UI 库,这就给一些需要讲求速度的小程序开发者提供了便利。mpvue 2.0 在 微信小程序 的基础上增加了对 百度智能小程序、头条小程序 和 支付宝小程序 的支持。
极乐君
2019/11/21
1.4K0
干货 | Taro 开发微信小程序入门与实战
uniapp字体ttf在小程序报错,解决方法
https://www.giftofspeed.com/base64-encoder
肥晨
2024/07/03
5450
基于后端云的吉他谱小程序开发
人的一生90%的时间都在做着无聊的事情,社会的发展使得我们的闲暇时间越来越多,我们把除了工作的其他时间放在各种娱乐活动上。
D2
2020/08/12
9870
基于后端云的吉他谱小程序开发
小程序的字体加载优化
在小程序中,字体的加载直接影响页面的渲染速度和用户体验。尤其是在使用自定义字体的情况下,如果字体文件较大,加载速度较慢,可能会导致页面出现闪烁或延迟显示的现象,给用户带来不好的体验。因此,合理优化字体加载成为提升小程序性能的关键环节之一。
LucianaiB
2025/01/28
4780
微信小程序开发
要求开发者有一些前端知识(HTML,CSS ,JavaScript), “工欲善其事必先利其器”,我们得先:
狂奔滴小马
2021/11/15
8K0
微信小程序开发
微信小程序处理代码高亮
小程序有自己的一套语法代码,与传统的html代码不太一致,这时就需要用到了文本解析工具,之前用的一直是一种解析方式是wxParse工具解析。但是这个工具没法实现代码的高亮,总是在一行显示。 经过在网上的查找发现了一个新的库,就是towxml。它是一个可将HTML、Markdown转为微信小程序WXML(WeiXin Markup Language)的渲染库
OECOM
2020/07/01
9410
Taro小程序跨端开发入门实战
随着业务不断扩张以及大小程序平台的崛起,针对每个平台都去写一套代码是不现实的,且原生的小程序开发模式有很多弊端。为了让小程序开发更简单、高效,采用Taro作为首选框架,本文将分享Taro的实践经验,主要内容围绕什么是Taro以及Taro如何使用(正确使用的姿势),还有Taro背后的一些设计思想来展开,让读者能够对Taro有较为完整的认识。Taro3.0已经逐渐成熟,实践项目已经进行Taro3.0的升级,因此本文代码示例以Taro3.0作为基础。
京东技术
2021/09/24
1.7K0
Taro小程序跨端开发入门实战
微信小程序项目实战
微信小程序开发设置的背景图片不显示,这是由于:background-image 只能用网络url或者base64图片编码 ,本地图片只能用 image标签src属性才行。当然 image标签src属性也可以使用网络url或者base64图片编码。
生南星
2020/04/26
2.1K0
Taro 小程序开发大型实战(一):熟悉的 React,熟悉的 Hooks
正当移动互联网进入白热化阶段时,以微信小程序为代表的一类“轻应用”异军突起。它们无需下载,使用方便,“用完即走”,同时功能也较为完备,一经推出即得到了各大平台和及用户的热烈追捧。但是问题也随之而来——开发者们要同时维护 Web 端、移动端、微信小程序、支付宝小程序等等多套用户界面,其维护成本可以想象。作为一个优秀的多端统一开发解决方案,Taro 的出现则改变了这一情况。正值 Taro 2.x 进入 beta 阶段,让我们沏上一杯茶,开始我们的 Taro 多端小程序开发之旅吧。
一只图雀
2020/04/07
2.6K1
探索Taro:跨平台开发的实践与原理
在如今不断增长的小程序市场中,小程序的数量迅速增多。这是因为小程序具有诸多优势,例如轻量化、便捷性和良好的用户体验,吸引了越来越多的开发者和企业加入这一领域。随着小程序的普及,各个行业都纷纷推出自己的小程序,以满足用户的多样化需求。
政采云前端团队
2023/12/13
1.6K0
探索Taro:跨平台开发的实践与原理
推荐项目:微信小程序富文本解析-wxParse
由于原作者仓库 wxParse 不再维护,我们项目中商品信息展示又是以wxParse这个用做富文本解析的;
程序员小猿
2021/01/19
1.5K0
推荐项目:微信小程序富文本解析-wxParse
mpvue-小程序之蹲坑记
mpvue 是兼容微信小程序的生命周期与 vue 的生命周期,vue 实例会接管小程序 Page 实例的生命钩子,因此需要使用到小程序的生命周期钩子时,可将相应的钩子方法定义在 vue 实例中 如定义当前Page的分享标题内容图片:
超然
2018/09/27
2.1K0
mpvue-小程序之蹲坑记
小程序工程化系列(一):文件依赖分析
去年(19年10月)在某技术沙龙上分享了《小程序工程化探索》后,陆续有网友联系到我询问一些实现方面的细节,虽然常年顶着黑眼圈修着“福报”,但还是决定抽出时间写一个小程序工程化系列,一是希望能帮到部分同学,二是希望能提升自己的总结与表达能力,由于是一个系列,所以每篇文章会尽量聚焦一个点,篇幅不会很长。闲话少述,本篇是小程序工程化系列第一篇,我将会详细介绍如何利用 Webpack 实现对小程序代码的文件依赖分析。
WecTeam
2020/08/04
2.1K0
小程序工程化系列(一):文件依赖分析
近两万字小程序攻略发布了
直接复用现有系统的登录体系,只需要在小程序端设计用户名,密码/验证码输入页面,便可以简便的实现登录,只需要保持良好的用户体验即可。
全栈程序员站长
2022/06/29
1.2K0
04-移动端开发教程-在线字体图标
本文主要介绍了在移动端网页开发中,如何利用web font和自定义字体实现字体图标。首先介绍了字体图标的原理和分类,然后介绍了如何在移动端网页中使用字体图标。最后列举了几个常用的字体图标工具,以及如何在这些工具中使用自定义字体。
老马
2018/01/02
3.5K0
干货 | 扒一扒小程序开发中遇到的那些坑!
开发小程序的过程中踩的坑不可谓不多,而有些坑也实在是让人郁闷,不扒一扒难以平我心头之愤呐。
极乐君
2019/12/03
6040
【腾讯课堂】基于Kbone使用React同构小程序开发实践总结
导语:Kbone 是微信推出的 Web 与小程序同构解决方案,该方案现已支持 Vue、React 等同构 本文目录一览: 1. 背景 2. 框架选择 3. React-Kbone-Miniprogram 过程 4. 接入现有工程     4.1 构建配置         4.1.1 Babel         4.1.2 Tree Shaking         4.1.3 与小程序代码复用     4.2 代码编写          4.2.1 小程序、H5 公共库适配         4.2.2 op
用户1097444
2022/06/29
7520
【腾讯课堂】基于Kbone使用React同构小程序开发实践总结
Taro UI 2.0 发布:新增自定义主题功能,适配更多小程序
转眼间,Taro UI 发布已有半年,在此期间,不断完善组件库的功能和特性,新增了许多组件和小工具,包括但不限于:
京东技术
2019/03/14
2.7K0
Taro UI 2.0 发布:新增自定义主题功能,适配更多小程序
Web图标的工程化方案
https://juejin.cn/post/6952150039732944910
coder_koala
2021/05/28
1.1K0
Web图标的工程化方案
相关推荐
小程序开发总结02 - 开发技巧和第三方插件的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验