webpack 之 Loader开发(一)

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

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

webpack 之 Loader开发(一)_第1张图片

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 日

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

webpack 之 Loader开发(一)_第2张图片

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

mdLoader.js

const MdLoader = (content, sourceMap, meta) => {
  const htmlCode = `

Markdown示例文本

Markdown是一种轻量级的「标记语言」。

引用文本:Markdown is a text formatting syntax inspired

普通内容

  • 读一本好书,就是在和高尚的人谈话。 ——歌德
  • 雇用制度对工人不利,但工人根本无力摆脱这个制度。 ——阮一峰

表格

姓名年龄工作
小可爱18吃可爱多
小小勇敢20爬棵勇敢树

代码块

语言名称支持: java, python, js, html, bash, json, yml, xml ...

` return `module.exports = ${JSON.stringify(htmlCode)}` // return `export default ${JSON.stringify(htmlCode)}` } module.exports = MdLoader

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

使用

index.vue




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

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

webpack 之 Loader开发(一)_第3张图片

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

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

你可能感兴趣的:(webpack实战读书,webpack)