vue3-quickstart-cli
Version:
一个用于快速创建 Vue3 项目的脚手架工具。
44 lines (40 loc) • 1.48 kB
JavaScript
import path from "path";
import fs from "fs-extra";
import chalk from "chalk";
export default function genI18n(targetDir, pkg) {
pkg.dependencies = pkg.dependencies || {};
pkg.dependencies["vue-i18n"] = "^9.9.0";
// 生成 src/i18n/index.ts
const i18nDir = path.join(targetDir, "src/i18n");
fs.ensureDirSync(i18nDir);
fs.writeFileSync(path.join(i18nDir, "index.ts"), `import { createI18n } from 'vue-i18n';
const messages = {
zh: { hello: '你好,世界!' },
en: { hello: 'Hello, world!' }
};
const i18n = createI18n({
legacy: false,
locale: 'zh',
messages
});
export default i18n;
`);
// 自动挂载到 main.ts/main.js
const mainTs = path.join(targetDir, "src/main.ts");
const mainJs = path.join(targetDir, "src/main.js");
let mainPath = fs.existsSync(mainTs) ? mainTs : mainJs;
if (fs.existsSync(mainPath)) {
let mainCode = fs.readFileSync(mainPath, "utf-8");
// 插入 import i18n
if (!mainCode.includes("import i18n from './i18n'")) {
mainCode = mainCode.replace(/(import App from .+;\n)/, `$1import i18n from './i18n';\n`);
}
// 插入 app.use(i18n)
if (!mainCode.includes("app.use(i18n)")) {
mainCode = mainCode.replace(/(const app = createApp\([^)]*\);?\n)/, `$1\napp.use(i18n);\n`);
}
fs.writeFileSync(mainPath, mainCode, "utf-8");
}
// 提示
console.log(chalk.green("已集成 vue-i18n 国际化!"));
}