vue3-quickstart-cli
Version:
一个用于快速创建 Vue3 项目的脚手架工具。
43 lines (39 loc) • 1.47 kB
JavaScript
import path from 'path';
import fs from 'fs-extra';
import chalk from 'chalk';
const plugin = {
name: 'i18n',
apply(targetDir, pkg) {
pkg.dependencies = pkg.dependencies || {};
pkg.dependencies['vue-i18n'] = '^9.10.0';
const i18nDir = path.join(targetDir, 'src/i18n');
fs.ensureDirSync(i18nDir);
fs.writeFileSync(path.join(i18nDir, 'index.ts'), `import { createI18n } from 'vue-i18n';
const messages = {
en: { message: { hello: 'hello world' } },
zh: { message: { hello: '你好,世界' } },
};
const i18n = createI18n({
locale: 'zh',
fallbackLocale: 'en',
messages,
});
export default i18n;
`);
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');
if (!mainCode.includes("import i18n from './i18n'")) {
mainCode = mainCode.replace(/(import App from .+;\n)/, `$1import i18n from './i18n';\n`);
}
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!'));
}
};
export default plugin;