webpack 之 Loader开发(一)

1. You may need an additional loader to handle the result of these loaders.(我们可能还需要一个额外的加载器来处理当前加载器的结果)

2. Loader可能经过一层层链路、又或者只有一层,最终的处理都是转化成 js,(Loader的本质是导出函数的JavaScript模块)Loader 只在编译时执行一次,也就是启动时,所以在开发过程中有改动,需要重启验证,又或者配合 webpack watch

3. 编写Loader原则

保持功能单一

我们项目中可能会配置很多,但要记住,要保持一个 Loader 的功能单一,避免做多种功能,只需完成一种功能转换即可

4. 实战

写一个 Markdown 转化Loader

vue.config.ts

module.exports = {
  publicPath: process.env.VUE_APP_PUBLIC_PATH,
  configureWebpack: {
    module: {
      rules: [
        {
          // md 后缀使用 mdLoader
          test: /\.md$/i,
          // 这里如果不写路径 默认从 node_modules 找
          use: './src/mdLoader',
        },
      ],
    },
  }
}

mdLoader.ts

首先看看Loader参数有哪些

const MdLoader = (content, sourceMap, meta) => {
  // 后缀是md文件的内容
  console.log(content, 'content')
  // 可被使用的 SourceMap 数据
  console.log(sourceMap, 'sourceMap')
  // meta 数据,可以是任何内容
  console.log(meta, 'meta')
}

 项目中的markdown文件:

更新时间:2021 年 10 月 11 日

**北京空间变换科技有限公司及其关联方(简称“**我们**”)作为巨量千川平台(“**巨量千川**”)的运营者,深知个人信息对您的重要性,我们将按照法律法规的规定,保护您的个人信息及隐私安全。本隐私政策详细描述了我们如何收集、使用和处理与您有关的个人信息。特别提示:希望您在使用巨量千川及相关服务前仔细阅读并理解本隐私政策,做出适当的选择。使用巨量千川以您接受本政策为前提条件。如对本政策内容有任何疑问、意见或建议,您可通过 customerservice.qianchuan@service.feishu.cn 与我们联系。本隐私政策将帮助您了解:**

 以上是打印的日志,是在Node的终端中打印,不是在浏览器中,Loader其实是Node语言

mdLoader.js

const MdLoader = (content, sourceMap, meta) => {
  const htmlCode = `<h2>Markdown示例文本</h2>
    <p>Markdown是一种轻量级的「标记语言」。</p>
    <blockquote>
      <p>引用文本:Markdown is a text formatting syntax inspired</p>
    </blockquote>
    <h3 id="普通内容">普通内容</h3>
    <ul>
      <li><strong>读一本好书,就是在和高尚的人谈话。</strong> ——歌德</li>
      <li><em>雇用制度对工人不利,但工人根本无力摆脱这个制度。</em> ——阮一峰</li>
    </ul>
    <h3 id="表格">表格</h3>
    <table align="center" width="400" cellspacing="1" border="1">
      <thead>
        <tr><th align="left">姓名</th><th align="center">年龄</th><th align="right">工作</th></tr>
      </thead>
      <tbody>
        <tr><td align="left">小可爱</td><td align="center">18</td><td align="right">吃可爱多</td></tr>
        <tr><td align="left">小小勇敢</td><td align="center">20</td><td align="right">爬棵勇敢树</td></tr>
      </tbody>
    </table>
    <h3 id="代码块">代码块</h3>
    <p>语言名称支持: <code>java</code>, <code>python</code>, <code>js</code>, <code>html</code>, <code>bash</code>, <code>json</code>, <code>yml</code>, <code>xml</code> ...</p>`
  return `module.exports = ${JSON.stringify(htmlCode)}`
  // return `export default ${JSON.stringify(htmlCode)}`
}

module.exports = MdLoader

假设 Md 处理最终如上所示,注意要导出的一定是 javaScript 函数

使用

index.vue

<template>
  <div v-html="MdText"></div>
</template>


const MdText = require('../docs/secret-i18n.md')
console.log(MdText, 'test')
export default {
  name: "Home",
  data () {
    return {
      MdText
    }
  }
};

这个时候浏览器控制台输出的MdText是被Loader处理过的了

页面的内容也能够正常展示了

当然这是只有一个Loader的情况,还会有Loader链式调用的情况~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
作为一名前端开发人员,我也有过编写 webpack loader 的经历。下面我来分享一下我的经验。 首先,了解 webpack loader 的概念和作用非常重要。在 webpack 中,loader 负责将源代码转换为模块。这意味着我们可以使用 loader 处理各种类型的文件,例如 JavaScript、CSS、图片等等。编写一个 loader,需要了解源代码的格式和目标代码的格式,以及如何将源代码转换为目标代码。 其次,我们需要确定要编写的 loader 类型。webpack 中有两种类型的 loader:普通 loader 和行内 loader。普通 loaderwebpack 配置文件中的模块规则相匹配,而行内 loader 是在代码中直接使用的 loader。 然后,我们需要选择编写 loader 的语言。webpack loader 可以使用任何支持 Node.js 的语言,例如 JavaScript、TypeScript、CoffeeScript 等等。选择语言时,应考虑到语言的特点和自己的熟练程度。 最后,我们需要编写 loader 的代码。编写 loader 的代码需要遵循一些规则,例如在代码中使用 this 上下文,接收源代码作为输入,返回目标代码作为输出。同时,为了方便调试和测试,我们还需要编写测试用例和使用示例。 总的来说,编写 webpack loader 需要深入了解 webpack 的概念和规则,同时需要有一定的编程经验和技能。通过不断地实践和学习,我们可以逐渐提高自己的能力,编写出高质量的 loader

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值