@voerkai18n/utils
Version:
utils for voerkai18n
62 lines (51 loc) • 1.76 kB
text/typescript
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"})