import fs from 'fs' import YAML from 'yaml' import _ from 'lodash' import chokidar from 'chokidar' // import Constant from '../server/constant/Constant.js' export default class YamlReader { /** * 读写yaml文件 * @param yamlPath yaml文件绝对路径 * @param isWatch 是否监听文件变化 */ constructor (yamlPath, isWatch = false) { this.yamlPath = yamlPath this.isWatch = isWatch this.initYaml() } initYaml () { // parseDocument 将会保留注释 this.document = YAML.parseDocument(fs.readFileSync(this.yamlPath, 'utf8')) if (this.isWatch && !this.watcher) { this.watcher = chokidar.watch(this.yamlPath).on('change', () => { if (this.isSave) { this.isSave = false return } this.initYaml() }) } } /** 返回读取的对象 */ get jsonData () { if (!this.document) { return null } return this.document.toJSON() } /* 检查集合是否包含key的值 */ has (keyPath) { return this.document.hasIn(keyPath.split('.')) } /* 返回key的值 */ get (keyPath) { return _.get(this.jsonData, keyPath) } /* 修改某个key的值 */ set (keyPath, value) { this.document.setIn([keyPath], value) this.save() } /* 删除key */ delete (keyPath) { this.document.deleteIn(keyPath.split('.')) this.save() } // 数组添加数据 addIn (keyPath, value) { this.document.addIn(keyPath.split('.'), value) this.save() } // 彻底删除某个key deleteKey (keyPath) { let keys = keyPath.split('.') keys = this.mapParentKeys(keys) this.document.deleteIn(keys) this.save() } save () { this.isSave = true let yaml = this.document.toString() fs.writeFileSync(this.yamlPath, yaml, 'utf8') } }