UNPKG

@voerkai18n/utils

Version:

utils for voerkai18n

62 lines (51 loc) 1.76 kB
import fs from "node:fs" /** * 将data更新到file中 * * file是一个具有默认导出的esm或cjs文件,data是一个对象 * * 例: * * zh-CN.ts * export default { * "12": "aaaa" * } * * writeLanguageMessages("zh-CN.ts",{"13":"bbbb"}) * * 执行后file更新为: * export default { * "12": "aaaa", * "13": "bbbb" * } * */ export function writeLanguageMessages(file:string,data:Record<string,any>){ // 读取文件内容 const content = fs.readFileSync(file, 'utf-8'); // 正则表达式匹配 ESM 和 CommonJS 模块的默认导出内容 const esmDefaultExportRegex = /export\s+default\s+({[\s\S]*?});/; const cjsDefaultExportRegex = /module\.exports\s*=\s*({[\s\S]*?});/; // 尝试匹配 ESM 模块的默认导出 let match = esmDefaultExportRegex.exec(content); let isESM = true; if (!match) { // 尝试匹配 CommonJS 模块的默认导出 match = cjsDefaultExportRegex.exec(content); isESM = false; } if (match) { // 解析现有的默认导出对象 const existingData = JSON.parse(match[1]); // 合并新的数据 const updatedData = { ...existingData, ...data }; // 将更新后的内容写回文件 const updatedContent = isESM ? `export default ${JSON.stringify(updatedData, null, 2)};` : `module.exports = ${JSON.stringify(updatedData, null, 2)};`; fs.writeFileSync(file, updatedContent, 'utf-8'); } else { throw new Error('No default export found in the file'); } } writeLanguageMessages(String.raw`C:\Work\Code\voerka-i18n\examples\vue3\src\languages\zh-CN.ts`,{"13":"bbbb"})