"添加前端模板和运行代码模块"
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// 构建后把 src 下所有 .vue 复制到 dist,与 tsc 输出目录一致。
|
||||
//
|
||||
// 背景:tsc 只编译 .ts 为 dist 下的 .js,不会复制 .vue;但 dist/index.js 仍 import './DesignModeApp.vue'。
|
||||
// Vite 虚拟模块会把相对路径改成绝对路径,若 dist 里没有对应 .vue 会报 Failed to resolve import。
|
||||
//
|
||||
// 用法:package.json 的 build 在 tsc 之后执行本脚本。
|
||||
import { copyFileSync, mkdirSync, readdirSync, statSync } from 'node:fs';
|
||||
import { dirname, join, relative } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const pkgRoot = join(__dirname, '..');
|
||||
const srcDir = join(pkgRoot, 'src');
|
||||
const distDir = join(pkgRoot, 'dist');
|
||||
|
||||
/**
|
||||
* 递归遍历目录,将每个 `.vue` 复制到 dist 中相同相对路径。
|
||||
* @param {string} dir 当前正在扫描的目录(绝对路径,位于 src 下)
|
||||
*/
|
||||
function copyVueFiles(dir) {
|
||||
for (const ent of readdirSync(dir, { withFileTypes: true })) {
|
||||
const full = join(dir, ent.name);
|
||||
if (ent.isDirectory()) {
|
||||
copyVueFiles(full);
|
||||
continue;
|
||||
}
|
||||
if (!ent.name.endsWith('.vue')) {
|
||||
continue;
|
||||
}
|
||||
const rel = relative(srcDir, full);
|
||||
const outPath = join(distDir, rel);
|
||||
mkdirSync(dirname(outPath), { recursive: true });
|
||||
copyFileSync(full, outPath);
|
||||
}
|
||||
}
|
||||
|
||||
if (!statSync(srcDir, { throwIfNoEntry: false })?.isDirectory()) {
|
||||
console.error('[copy-vue-to-dist] src directory not found:', srcDir);
|
||||
process.exit(1);
|
||||
}
|
||||
if (!statSync(distDir, { throwIfNoEntry: false })?.isDirectory()) {
|
||||
console.error('[copy-vue-to-dist] dist directory not found; run tsc first:', distDir);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
copyVueFiles(srcDir);
|
||||
console.log('[copy-vue-to-dist] Copied all .vue files from src to dist.');
|
||||
Reference in New Issue
Block a user