手写npm包——markdown转html

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

结果:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,313评论 2 33
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 8,994评论 2 41
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,050评论 25 709
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 100,059评论 9 468
  • 现在,我戴着耳机听着张学友的“遥远的她”歌词很感人,因为歌词背后的故事却是悲伤的爱情故事,故事中的男孩是个足球运动...
    小衲阅读 2,976评论 0 1

友情链接更多精彩内容