프로필 배포가 고정한 전체 커밋 SHA를 프론트 빌드와 Turbo 캐시 입력에 전달한다. 게임 정보 대화상자와 데스크톱·모바일 Chromium 검증을 함께 보강한다.
83 lines
2.6 KiB
TypeScript
83 lines
2.6 KiB
TypeScript
import { defineConfig, loadEnv } from 'vite';
|
|
import vue from '@vitejs/plugin-vue';
|
|
import tailwindcss from '@tailwindcss/vite';
|
|
import { execFileSync } from 'node:child_process';
|
|
import path from 'path';
|
|
import { mergeViteEnv } from './src/config/viteEnv';
|
|
|
|
const fullCommitShaPattern = /^[0-9a-f]{40,64}$/iu;
|
|
|
|
export const resolveBuildCommitSha = (explicitSha: string | undefined, repositoryRoot: string): string => {
|
|
const normalizedExplicitSha = explicitSha?.trim();
|
|
if (normalizedExplicitSha && fullCommitShaPattern.test(normalizedExplicitSha)) {
|
|
return normalizedExplicitSha.toLowerCase();
|
|
}
|
|
try {
|
|
const repositorySha = execFileSync('git', ['rev-parse', 'HEAD'], {
|
|
cwd: repositoryRoot,
|
|
encoding: 'utf8',
|
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
}).trim();
|
|
return fullCommitShaPattern.test(repositorySha) ? repositorySha.toLowerCase() : 'unknown';
|
|
} catch {
|
|
return 'unknown';
|
|
}
|
|
};
|
|
|
|
const normalizeBasePath = (value: string | undefined): string => {
|
|
const pathValue = (value ?? '/').trim();
|
|
if (!pathValue || pathValue === '/') {
|
|
return '/';
|
|
}
|
|
return `/${pathValue.replace(/^\/+|\/+$/g, '')}/`;
|
|
};
|
|
|
|
const resolvePreviewAllowedHosts = (value: string | undefined): true | string[] => {
|
|
const normalized = value?.trim();
|
|
if (normalized === '*') {
|
|
return true;
|
|
}
|
|
const hosts = (normalized ?? 'dev-sam-e2e.hided.net')
|
|
.split(',')
|
|
.map((host) => host.trim())
|
|
.filter(Boolean);
|
|
return hosts;
|
|
};
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig(({ mode }) => {
|
|
const env = mergeViteEnv(loadEnv(mode, process.cwd(), ''), process.env);
|
|
const buildCommitSha = resolveBuildCommitSha(env.VITE_BUILD_COMMIT_SHA, path.resolve(import.meta.dirname, '../..'));
|
|
return {
|
|
base: normalizeBasePath(env.VITE_APP_BASE_PATH),
|
|
plugins: [vue(), tailwindcss()],
|
|
define: {
|
|
'import.meta.env.VITE_BUILD_COMMIT_SHA': JSON.stringify(buildCommitSha),
|
|
},
|
|
build: {
|
|
sourcemap: true,
|
|
},
|
|
worker: {
|
|
format: 'es',
|
|
rolldownOptions: {
|
|
output: {
|
|
codeSplitting: false,
|
|
},
|
|
},
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve(import.meta.dirname, './src'),
|
|
},
|
|
},
|
|
server: {
|
|
host: '0.0.0.0',
|
|
port: 3001,
|
|
},
|
|
preview: {
|
|
host: '0.0.0.0',
|
|
allowedHosts: resolvePreviewAllowedHosts(env.VITE_PREVIEW_ALLOWED_HOSTS),
|
|
},
|
|
};
|
|
});
|