Compiler 模块是 webpack 的主要引擎,它通过 CLI 传递的所有选项, 或者 Node API,创建出一个 compilation 实例。 它扩展(extend)自 Tapable 类,用来注册和调用插件。

const { readFileSync } = require('fs');
const { resolve } = require('path');
const {compileHTML} = require('./compileHTML')
class MdToHtmlPlugin {constructor({ template, filename }) {if (!template) {throw new Error('expected a md file');}(this.template = template),(this.filename = filename ? filename : 'md.html');}apply(compiler) {compiler.hooks.emit.tap('md-to-html-template', (compilation) => {//所有需要输出的资源会存放在 compilation.assets 中,//compilation.assets 是一个键值对,键为需要输出的文件名称,值为文件对应的内容const _assets = compilation.assets;// 得到md文件const _mdContent = readFileSync(this.template, 'utf8');// 得到html 模板const _templateHTML = readFileSync(resolve(__dirname, 'template.html'),'utf8',);//md文件要一行一行处理,所以根据 \n 把md文件分成数组const _mdContentArray = _mdContent.split('\n');// 将template.html的占位符保存下来const INNER_MARK = '<!-- inner -->';// 这个函数待定 ,还没写完:// 主要功能就是把md转化成htmlconst _htmlString = compileHTML(_mdContentArray)// 用编译好的htmlString 替换 模板里面的占位符,(即 把md文档转化成html标签包裹的HTML文档,然后插入进模板中)  //然后把模板输出const _finalHTML = _templateHTML.replace(INNER_MARK, _htmlString);_assets[this.filename] = {// 加入一个要输出的资源  即 以this.filename 为文件名 输出编译好的md-to-html文件source() {return _finalHTML;},// 指定大小size() {return _finalHTML.length;},};});}
}module.exports = MdToHtmlPlugin;

手写webpack插件,小白入门 —— md文档转成html相关推荐

  1. linux md文件 编辑,用Vim写md文档的简单姿势

    对于重度Vim使用者来说,编辑md文档用Vim是顺理成章的事,在此记录下来. 近期开始带学生接触Openstack开发.在8G内存的笔记本上跑个Devstack开发环境,至少要分掉4G,否则虚拟机卡成 ...

  2. babel原理_手写webpack核心原理,再也不怕面试官问我webpack原理

    手写webpack核心原理 一.核心打包原理 1.1 打包的主要流程如下 1.2 具体细节 二.基本准备工作 三.获取模块内容 四.分析模块 五.收集依赖 六.ES6转成ES5(AST) 七.递归获取 ...

  3. 手写webpack系列一:了解认识loader-utils

    Created By JishuBao on 2019-03-29 12:38:22 Recently revised in 2019-04-01 12:38:22   欢迎大家来到技术宝的掘金世界, ...

  4. 【自己动手写神经网络】小白入门连载(二)--机器人时代必须得有人工神经(不是神经病)...

    2019独角兽企业重金招聘Python工程师标准>>> [自己动手写神经网络]小白入门连载(一) 在上一章中,我们已经介绍了神经网络的基本概念.思想,并提及了有关人工神经元模型的部分 ...

  5. web 前端签名插件_手写签名插件—jSignature

    jSignature 是一个通过捕捉笔画的矢量轮廓输出多种格式数据的jQuery插件,通过该插件我们可以实现绘画板.手写签名等功能. 使用该插件需要引入 jQuery 和jSignature.js,首 ...

  6. 页面手写签名插件 jSignature.min.js 使用实例

    页面手写签名插件 jSignature.min.js 使用实例 jSignature.min.js 插件下载 页面使用demo <!DOCTYPE html> <html xmlns ...

  7. 解决别人在收到我们发送的*.md文档时,图片无法显示的问题。

    原因:         .word格式其实是一个压缩包,把图片也放在里面了,所以我们在收到word文件后,可以正常查看其中的图片. 但是.md格式不同,一般的,我们需要同时传输.md文档和图片,或者他 ...

  8. 自动将*.md文档中的图片上传到Gitee(Typora+PicGo+Gitee)

    1. 存在问题 很多刚接触markdown文档格式的友友们,在使用文档中的图片时还存在一些问题:直接将截图下来的图片或是本机图片粘贴在文档中,图片的地址还是本地文件的地址(如D:\xxx),这种情况下 ...

  9. README.md文档编写

    本公司轻量化程序一般分为控制台程序和插件程序两种,可分别编写md文件,命名为:README.md和README_ADDIN.md.其中参考内容模型为: 1:README.md # XXX#### 调用 ...

最新文章

  1. Oracle IMP-00403
  2. java 理论与实践,Java 理论与实践: 正确使用 Volatile 变量
  3. 查看电脑电池损耗的命令
  4. Nginx日志文件的配置
  5. mysql 去重_mysql 去重留一
  6. 2015 跨年博文总结
  7. 如何通过调试找到自己需要的ABAP增强
  8. Java面向对象的三大特征(封装,继承,多态)
  9. 12GB+512GB售价18999元起,华为发布Mate X2典藏版
  10. 什么是创新型人才,创新型企业?
  11. 美团到店综合知识图谱的构建与应用
  12. 走进Selenium新世界
  13. J-Link V9固件修复
  14. moto+早期android手机,七款摩托罗拉早期经典机型回顾
  15. 【美港探案】万物云港股IPO:背靠万科,物业也要搞云?
  16. 衣带渐宽终不悔,为UI消得人憔悴
  17. 如何压缩动态图片大小?gif图太大了怎么压缩?
  18. python pip 连接超时,使用国内源下载
  19. Windows各版本官方原版系统下载
  20. 360网站卫士cdn全面转向奇安信

热门文章

  1. Android启动界面SplashActivity的实现方法
  2. ios禁止网页放大缩小
  3. 六大视频网站播放清晰度比较
  4. 力扣刷题——最长公共前缀
  5. iphone android 换手机屏幕,求助:万年苹果用户想换手机,安卓旗舰还是继续12pro?折叠屏可尝鲜吗?...
  6. 多媒体演示文稿PowerPoint无法打开,可尝试修复此演示文稿 win10,office2010或2016的解决方法
  7. 程序猿攻城狮必须要掌握的十大经典算法
  8. html设置a标签禁止跳转,css如何禁止a标签跳转
  9. 思念到极致是什么感觉?(2)
  10. 只有APE文件的情况下自己制作CUE文件的方法-转,经过本人验证真实可靠good!20101128终极解决版...