美文网首页
手写npm包——markdown转html

手写npm包——markdown转html

作者: 流着万条永远的河 | 来源:发表于2017-11-12 00:11 被阅读0次

demo

基本共有套路

首先是要先把包给发布出来,前面的教程很明确,基本囊括所有,除了包的具体功能要扩展,其他先要干的就是一个流程:

  • 新建文件夹,里面建立package.json文件
    终端输入
npm init -y

傻瓜式操作,注意命名冲突的错误。

  • 新建index.js文件
    根据上次的教程,做成命令工具,index.js开头有句话:
#!/usr/bin/env node 
  • package.json的对象里新增一个属性:
"bin": {
        "mdtohtml": "./index.js"
    }

现在想想思路:

我们是要在一个目录下输入命令

mdtohtml file.md out.html

得到一个file.md文件,读取,得到字符串,处理字符串,写入html。

这里有个问题,现在刚发布,正在开发,修改代码就要发布,再执行,,,太麻烦了。
依靠调用命令的指针原理,调用的就是下载到本地的/usr/local/lib/node_modules/markdowntoohtml/index.js(mac的),那就在这个文件上修改,再直接调用命令测试,直到可以了,然后再把结果复制到包的文件里,再发布。

开始实现功能

需要从用户输入的命令里得到目标文件

首先,肯定是输入了一个类似a.md的一个文件名,然后如何得到这个文件的绝对路径?
一个模块process.argv功能,它可以传入参数的,这时候,在index.js写入console.log(process.argv)测试下,运行命令

mdtohtml a.md b.html

数组啊,第三四项就是我们的参数啊。
所以传参就容易了,index.js里输入

if (process.argv.length < 4) {
    console.log('输入的参数不对,,,')
} else {
    var inputPath = process.argv[2]
    var outputPath = process.argv[3]
}

读文件写文件

需要nodejs内置模块,index.js写入

var fs = require('fs')
if (process.argv.length < 4) {
    console.log('输入的参数不对,,,')
} else {
    var inputPath = process.argv[2]
    var outputPath = process.argv[3]
   
    fs.readFile(inpath, 'utf8', function(err, str) {
        if (err) {
            console.log('read failed,,,')
        } else {
            console.log(str)
           
            fs.writeFile(outpath, result, function(err) {
                if (err) {
                    return console.log('read failed,,,')
                } else {
                    console.log('writed,,,,')
                }

            })
        }
    })
}

三个要处理的问题

  • 读取文件路径的获取inpath获取
    引入一个模块功能process.cwd(),它是得到了一个当前所在的目录的路径,然后再加上inputPath,不就是了吗?
    又有一个问题了,mac跟win系统的路径表现不一样啊,这个不是问题啊,再引入一个模块path,反正是问题的差不多都解决了,
var path = require('path')
inpath 就是path.resolve(process.cwd(),inputPath)
  • 同理写入的文件outpasth类似了:
path.resolve(process.cwd(),outputPath)
  • 读到str数据了,要处理成html格式了,也就是上面那一串的里的result,它是什么呢?
    需要对应的包包,npm上查一下
    得到一个markdown-it的包,看了它的教程,直接先安装到本地目录下,然后再index.js写入
var mdit = require('markdown-it')
var md = new mdit()
result就是   md.render(str)

最终的全部代码就是


var fs = require('fs')
var path = require('path')
console.log(process.argv)
var mdit = require('markdown-it')
var md = new mdit()

if (process.argv.length < 4) {
    console.log('输入的参数不对,,,')
} else {
    var inputPath = process.argv[2]
    var outputPath = process.argv[3]
    console.log(process.cwd())
    fs.readFile(path.resolve(process.cwd(), inputPath), 'utf8', function(err, str) {
        if (err) {
            console.log('read failed,,,')
        } else {
            console.log(str)
            var result = md.render(str)
            fs.writeFile(path.resolve(process.cwd(), outputPath), result, function(err) {
                if (err) {
                    return console.log('read failed,,,')
                } else {
                    console.log('writed,,,,')
                }

            })
        }
    })
}

测试一下


在终端里,a.md所在路径下,输入

mdtohtml a.md b.html

结果:


相关文章

  • 手写npm包——markdown转html

    demo 基本共有套路 首先是要先把包给发布出来,前面的教程很明确,基本囊括所有,除了包的具体功能要扩展,其他先要...

  • Markdown转HTML

      目前,产品中所有前端组件的API文档均由Markdown编写,之前的处理方式为在Atom中写好,然后另存为ht...

  • 手写的npm包

    此指令主要是运用于vscode开发vue项目新建时生成eslint的一些配置配合上vscode商店的(ESLint...

  • (html2canvas jspdf)html转pdf带分页

    1、下载npm包 npm i html2canvas jspdf -s 2、页面引入 import html2c...

  • Python爬虫html转markdown

    Python爬虫html转markdown 说明 动态博客转静态博客(例如typecho转hexo),在上传静态博...

  • markdown工具

    推荐一个好用的markdown在线编辑,markdown在线转word、pdf、html 的好工具http://c...

  • vue-cli项目中——md文件转html

    方式一:软件转html,然后粘贴到html编辑器里 有的markdown编辑器支持直接转成html,比如markd...

  • SCC编译器设计与实现

    转:https://www.cnblogs.com/boyublog/p/4967274.html 《自己动手写编...

  • 如何自己写一个公用的NPM包

    以markdown-clear,创建过程为例,讲解整个NPM包创建和发布流程 1 如何创建一个包 1.1 创建并使...

  • Java 实现 markdown转Html

    以来github的开源项目flexmark-java maven依赖: 精简依赖: API简单实用

网友评论

      本文标题:手写npm包——markdown转html

      本文链接:https://www.haomeiwen.com/subject/vlngmxtx.html