This commit is contained in:
71
scripts/tests/verifyBuild.mjs
Normal file
71
scripts/tests/verifyBuild.mjs
Normal file
@@ -0,0 +1,71 @@
|
||||
import { mkdtemp, readFile } from 'node:fs/promises'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import { build, createServer, loadConfigFromFile } from 'vite'
|
||||
import Components from 'unplugin-vue-components/vite'
|
||||
import AutoImport from 'unplugin-auto-import/vite'
|
||||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
||||
|
||||
// 与生产配置相同的构建,关闭声明文件生成,避免覆盖工作区已有的用户修改。
|
||||
const protectedPaths = [
|
||||
'src/types/components.d.ts',
|
||||
'src/types/auto-imports.d.ts',
|
||||
'.auto-import.json'
|
||||
]
|
||||
const snapshots = await Promise.all(protectedPaths.map((path) => readFile(path)))
|
||||
const serve = process.argv.includes('--serve')
|
||||
const loaded = await loadConfigFromFile({
|
||||
command: serve ? 'serve' : 'build',
|
||||
mode: serve ? 'development' : 'production'
|
||||
})
|
||||
const outputDir = await mkdtemp(join(tmpdir(), 'one-pipe-october-build-'))
|
||||
const plugins = loaded.config.plugins
|
||||
.flat(Infinity)
|
||||
.filter(
|
||||
(plugin) => plugin && !['unplugin-vue-components', 'unplugin-auto-import'].includes(plugin.name)
|
||||
)
|
||||
plugins.push(
|
||||
Components({
|
||||
deep: true,
|
||||
extensions: ['vue'],
|
||||
dirs: ['src/components'],
|
||||
resolvers: [ElementPlusResolver()],
|
||||
dts: false
|
||||
}),
|
||||
AutoImport({
|
||||
imports: ['vue', 'vue-router', '@vueuse/core', 'pinia'],
|
||||
resolvers: [ElementPlusResolver()],
|
||||
dts: false,
|
||||
eslintrc: { enabled: false }
|
||||
})
|
||||
)
|
||||
if (serve) {
|
||||
const { mockApiPlugin } = await import('./octoberBrowserFixtures.mjs')
|
||||
const server = await createServer({
|
||||
...loaded.config,
|
||||
configFile: false,
|
||||
mode: 'development',
|
||||
plugins: [mockApiPlugin, ...plugins],
|
||||
server: { host: '127.0.0.1', port: 5190, strictPort: true, proxy: {} }
|
||||
})
|
||||
await server.listen()
|
||||
console.log(
|
||||
'Local mock preview: http://127.0.0.1:5190 (all /api requests intercepted; no real backend writes)'
|
||||
)
|
||||
} else {
|
||||
await build({
|
||||
...loaded.config,
|
||||
configFile: false,
|
||||
plugins,
|
||||
logLevel: 'warn',
|
||||
build: { ...loaded.config.build, outDir: outputDir, emptyOutDir: false }
|
||||
})
|
||||
}
|
||||
for (let i = 0; i < protectedPaths.length; i++) {
|
||||
if (!snapshots[i].equals(await readFile(protectedPaths[i])))
|
||||
throw new Error(`Build modified protected file: ${protectedPaths[i]}`)
|
||||
}
|
||||
if (!serve)
|
||||
console.log(
|
||||
`Production build passed. Generated declaration files preserved. Output: ${outputDir}`
|
||||
)
|
||||
Reference in New Issue
Block a user