UNPKG

vue3-quickstart-cli

Version:

一个用于快速创建 Vue3 项目的脚手架工具。

65 lines (62 loc) 2.14 kB
import path from 'path'; import fs from 'fs-extra'; import chalk from 'chalk'; export default function genTypescript(targetDir, pkg) { fs.writeFileSync(path.join(targetDir, 'tsconfig.json'), `{ "compilerOptions": { "target": "ESNext", "module": "ESNext", "moduleResolution": "Node", "strict": true, "jsx": "preserve", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "baseUrl": ".", "paths": { "@/*": ["src/*"] } }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] } `); // 健壮入口文件重命名逻辑:main.js/main.jsx/main.mjs/main.cjs/main.tsx -> main.ts const srcDir = path.join(targetDir, 'src'); const candidates = [ 'main.js', 'main.jsx', 'main.mjs', 'main.cjs', 'main.tsx' ]; let renamed = false; for (const file of candidates) { const filePath = path.join(srcDir, file); const mainTs = path.join(srcDir, 'main.ts'); if (fs.existsSync(filePath)) { fs.renameSync(filePath, mainTs); renamed = true; break; } } // 如果没有 main.ts,给出友好提示 const mainTsPath = path.join(srcDir, 'main.ts'); if (!fs.existsSync(mainTsPath)) { fs.writeFileSync(mainTsPath, `import { createApp } from 'vue'; import App from './App.vue'; import store from './store'; import router from './router'; const app = createApp(App); app.use(store); app.use(router); app.mount('#app'); `); console.log(chalk.yellow('未检测到入口文件,已自动生成 main.ts。')); } // App.vue script setup 改为 lang="ts" const appVue = path.join(targetDir, 'src/App.vue'); if (fs.existsSync(appVue)) { let appCode = fs.readFileSync(appVue, 'utf-8'); appCode = appCode.replace('<script setup>', '<script setup lang="ts">'); fs.writeFileSync(appVue, appCode, 'utf-8'); } // 不要写 pkg.devDependencies['vue'] pkg.dependencies['vue'] = '^3.5.17'; console.log(chalk.green('已集成 TypeScript,入口文件为 main.ts!')); }