实例:

import { join } from "path";
import { SETTING } from "../constant/type/type";
import { FileEnhance } from "./fileEnhance";
import { parse as parseJSON5, stringify as stringifyJSON5 } from 'json5';
  
export class Setting {
    constructor() {
    }
    static defaultSettingName = 'setting'
    public static getPath(settingName: string): string {
        const fileName = `../config/${settingName}` + '.json5';
        return join(__dirname, fileName);
    }
    static async savaSetting(setting: SETTING, settingName = this.defaultSettingName) {
        await FileEnhance.replaceRange({ path: this.getPath(settingName) }, stringifyJSON5(setting));
    }
    static async loadSetting(settingName = this.defaultSettingName): Promise<SETTING> {
        const defaultSetting: SETTING = {
            branch: 'master',
            dir: [],
            commitMassage: "Auto committed",
            timestamp: true,
            timeSplit: "-"
        };
        let txt: string
        try {
            txt = await FileEnhance.getRange({ path: this.getPath(settingName), flags: 'r+' })
            // console.log('txt:', txt);
        } catch (error: any) {
            if (error.errno == -4058) {
                await FileEnhance.replaceRange({ path: this.getPath(settingName) }, this.getSettingTemplate());
                txt = await FileEnhance.getRange({ path: this.getPath(settingName), flags: 'r+' })
            }
            else throw error;
        }
        return Object.assign(defaultSetting, parseJSON5(txt));
    }
    static getSettingTemplate() {
        const json: string =
            `{
    "dir": []
    // ,"branch":"master"
    // ,"commitMassage":"提交信息"
    // ,"timestamp": true
    // ,"timeSplit": "-"
    // ,"yearNum": "1到4"  /*提交信息中年份保留位数*/
}`
        return json;
    }
}