HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: dawonefr-98 (1071)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/eslinced-103/brise-edu.or.kr/vite.config.js
import { defineConfig,loadEnv } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';
import fileSystem from 'fs';
import path from "path";

const viteAppInputs = [
    'resources/js/app.js',
    'resources/css/tailwind.css'
];

/**
 * @brief Amuz Packages 에 포함된 테마폴더의 vue 나 inertiaJS의 app.js를 merge 해준다.
 */
const packageDirectory = './AmuzPackages/';
fileSystem.readdir(packageDirectory, (err, packages) => {
    packages.forEach(packageName => {
        if(!packageName.startsWith(".")){
            console.log("detected Package : ", packageName);
            let themePath = packageDirectory + packageName;
            fileSystem.readdir(themePath, (err2, directories) => {
                directories.forEach(directoryName => {
                    if(directoryName.startsWith("theme-")){
                        console.log('detected Theme : ', directoryName);
                        let themeAppJsFile = themePath + "/" + directoryName + "/resources/js/app.js";
                        fileSystem.access(themeAppJsFile, fileSystem.F_OK, (err) => {
                            if (err) {
                                console.error("theme",directoryName,"에서 app.js 발견되지 않음 : ",themeAppJsFile);
                                return true;
                            }
                            viteAppInputs.push(themeAppJsFile);
                        });

                        let themeAppJsxFile = themePath + "/" + directoryName + "/resources/js/app.jsx";
                        fileSystem.access(themeAppJsxFile, fileSystem.F_OK, (err) => {
                            if (err) {
                                console.error("theme",directoryName,"에서 app.jsx 발견되지 않음 : ",themeAppJsxFile);
                                return true;
                            }
                            viteAppInputs.push(themeAppJsxFile);
                        });

                        let themeAppCssFile = themePath + "/" + directoryName + "/resources/css/app.css";
                        fileSystem.access(themeAppCssFile, fileSystem.F_OK, (err) => {
                            if (err) {
                                console.error("theme",directoryName,"에서 app.css 발견되지 않음 : ",themeAppJsFile);
                                return true;
                            }
                            viteAppInputs.push(themeAppCssFile);
                        });
                    }
                });
            });
        }
    });
});

export default ( {mode} ) => {
    process.env = { ...process.env, ...loadEnv( mode, process.cwd() ) };

    let config = {
        plugins: [
            laravel({
                input: viteAppInputs,
                refresh: true,
            }),
            vue({
                template: {
                    transformAssetUrls: {
                        base: null,
                        includeAbsolute: false,
                    },
                },
            }),
        ],

        build: {
            target: 'esnext',
            chunkSizeWarningLimit: 1600,
            rollupOptions: {
                output:{
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            return id.toString().split('node_modules/')[1].split('/')[0].toString();
                        }
                    }
                }
            }
        }
    }

    if( process.env.VITE_APP_ENV === "local" ) {
        console.log( 'this is local mode' );
        config[ "server" ] = {
            secure: true,
            host: 'localhost',
            https: {
                key: fileSystem.readFileSync( './localhost-key.pem' ),
                cert: fileSystem.readFileSync( './localhost.pem' ),
            },
            hmr: {
                host: 'localhost',
            },
        };
    }

    return defineConfig(config);
}