Переглянути джерело

refactor: build directly to timestamped directory for safer atomic switch

unknown 2 місяців тому
батько
коміт
1beaefef62
3 змінених файлів з 10 додано та 15 видалено
  1. 3 5
      build_frontend.sh
  2. 4 8
      server_update.sh
  3. 3 2
      vite.config.ts

+ 3 - 5
build_frontend.sh

@@ -21,13 +21,11 @@ npm run i18n:generate && npx vue-tsc --noEmit
 
 # 5. Запускаем сборку Vue
 echo "🔨 Сборка проекта (Vite / Vue 3)..."
-npm run build
-
-# Сохраняем сборку в директорию с таймштампом и переключаем симлинк
 TIMESTAMP=$(date +%Y%m%d_%H%M%S)
 NEW_DIST_DIR="dist_$TIMESTAMP"
-echo "Success! Moving build to $NEW_DIST_DIR and switching symlink..."
-mv dist $NEW_DIST_DIR
+
+# Строим сразу в новую папку через переменную окружения
+VITE_OUT_DIR=$NEW_DIST_DIR npm run build
 
 # Обработка перехода от папки к симлинку
 if [ -d "dist" ] && [ ! -L "dist" ]; then

+ 4 - 8
server_update.sh

@@ -22,17 +22,13 @@ npm run i18n:generate
 
 # 4. Собираем фронтенд
 echo "building frontend..."
-# Если dist это симлинк, npm run build (vite) может его удалить и создать папку, что нам и нужно.
-# Если это папка, он её очистит.
-npm run build
-
-# Сохраняем сборку в директорию с таймштампом и переключаем симлинк
 TIMESTAMP=$(date +%Y%m%d_%H%M%S)
 NEW_DIST_DIR="dist_$TIMESTAMP"
-echo "Moving build to $NEW_DIST_DIR and switching symlink..."
-mv dist $NEW_DIST_DIR
 
-# Обработка перехода от папки к симлинку
+# Строим сразу в новую папку через переменную окружения
+VITE_OUT_DIR=$NEW_DIST_DIR npm run build
+
+# Обработка перехода от папки к симлинку (на случай если 'dist' еще папка)
 if [ -d "dist" ] && [ ! -L "dist" ]; then
     echo "Found legacy dist directory, backing it up..."
     mv dist dist_legacy_backup

+ 3 - 2
vite.config.ts

@@ -7,11 +7,12 @@ const prerender = require('vite-plugin-prerender');
 
 export default defineConfig(({ mode }) => {
   console.log(`🔨 Vite build mode: ${mode}`);
+  const outDir = process.env.VITE_OUT_DIR || 'dist';
   return {
     plugins: [
       vue(),
       prerender({
-        staticDir: path.join(__dirname, 'dist'),
+        staticDir: path.join(__dirname, outDir),
         routes: ['/', '/en/', '/me/', '/ru/', '/ua/'],
         renderer: new prerender.PuppeteerRenderer({
           renderAfterDocumentEvent: 'render-event',
@@ -41,7 +42,7 @@ export default defineConfig(({ mode }) => {
     },
   },
   build: {
-    outDir: 'dist', 
+    outDir: outDir, 
     target: 'es2018',
     chunkSizeWarningLimit: 1000,
     cssMinify: true,