使用 ramda 解析 .yarnrc/.npmrc 配置文件的例子

使用 纯函数工具(ramda.js) 解析 .yarnrc/.npmrc 配置文件的例子
源代码,依赖 ramda.js

./utils/parseConfig

((root, factory) => {
    if (typeof define === 'function' && define.amd) {
        define(['ramda'], factory);
    } else if (typeof exports === 'object') {
        var R = require('ramda');
        module.exports = factory(R);
    } else {
        root.parseConfig = factory(root.R);
    }
})(this, (R) => {
    let regs = {
        trimzy:R.replace(/\\\\/g,"\\"), // 去除多余的转义符
        trims:R.replace(/^(\s|\"|\'|\ )+|(\s|\"|\'|\ )+$/g,'')// 去除端引号和空格
    }
    return function creteConverter(annotator,spliter){
        return R.compose(
            R.fromPairs,//转成二维数组转为对象
            R.filter(arr=>arr[0] !=""),//过滤掉key为空的
            R.map(R.compose(
                R.map(regs.trims), // 去除两端多余的 双引号/单引号/空白
                R.split(spliter),       // 使用 key value 分隔符
                regs.trimzy // 去除路径中转义符
            )), // 转为二维数组,并去key为空的数据
            R.filter(s=>R.both(
                str=>str[0]!=annotator, //去除 # 注释行
                str=>R.trim(str)!="" //去除空行
            )(s)),
            R.map(R.trim),//去除两段空白
            R.split(/\r\n|\r|\n/) // 分行
        )
    }
});

node 使用示例

const parseConfig = require("./utils/parseConfig");
const os = require("os");
const path = require("path");
const fs = require("fs");
const homedir = os.homedir();

let parseYarnConfig = parseConfig("#"," ")
let parseNpmConfig = parseConfig(";","=")

var str = fs.readFileSync(path.join(homedir,".yarnrc")).toString();
var str2 = fs.readFileSync(path.join(homedir,".npmrc")).toString();

var config = parseYarnConfig(str);
var config2 = parseNpmConfig(str2);

console.log(config);
console.log(config2);

浏览器端使用示例

require([./utils/parseConfig“],function(parseConfig){
	var parser = parseConfig("#"," ")
	var teststr=`
# 配置文件示例
# 这是一段注释
cache "D:\\yarn\\cache"
global "D:\\yarn\\global"
`
	console.log(parser(teststr))
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zq.xc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值