使用 纯函数工具(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))
})