/*
 * vite配置
 *
 * @Author:    1024创新实验室-主任：卓大
 * @Date:      2022-05-02 23:44:56
 * @Wechat:    zhuda1024
 * @Email:     lab1024@163.com
 * @Copyright  1024创新实验室 （ https://1024lab.net ），Since 2012
 */
import {resolve} from 'path';
import vue from '@vitejs/plugin-vue';
import customVariables from '/@/theme/custom-variables';

const pathResolve = (dir) => {
    return resolve(__dirname, '.', dir);
};
export default {
    base: process.env.NODE_ENV === 'production' ? '/' : '/',
    root: process.cwd(),
    resolve: {
        alias: [
            // 国际化替换
            {
                find: 'vue-i18n',
                replacement: 'vue-i18n/dist/vue-i18n.cjs.js',
            },
            // 绝对路径重命名：/@/xxxx => src/xxxx
            {
                find: /\/@\//,
                replacement: pathResolve('src') + '/',
            },
            {
                find: /^~/,
                replacement: '',
            },
        ],
    },
    // 服务端渲染
    server: {
        host: '0.0.0.0',
        port: 8080,
    },
    plugins: [vue()],
    optimizeDeps: {
        include: ['ant-design-vue/es/locale/zh_CN', 'dayjs/locale/zh-cn', 'ant-design-vue/es/locale/en_US'],
        exclude: ['vue-demi'],
    },
    build: {
        // 清除console和debugger
        terserOptions: {
            compress: {
                drop_console: true,
                drop_debugger: true,
            },
        },
        rollupOptions: {
            output: {
                //配置这个是让不同类型文件放在不同文件夹，不会显得太乱
                chunkFileNames: 'js/[name]-[hash].js',
                entryFileNames: 'js/[name]-[hash].js',
                assetFileNames: '[ext]/[name]-[hash].[ext]',
                manualChunks(id) {
                    //静态资源分拆打包
                    if (id.includes('node_modules')) {
                        return id.toString().split('node_modules/')[1].split('/')[0].toString();
                    }
                },
            },
        },
        target: 'modules',
        outDir: 'dist', // 指定输出路径
        assetsDir: 'assets', // 指定生成静态文件目录
        assetsInlineLimit: '4096', // 小于此阈值的导入或引用资源将内联为 base64 编码
        chunkSizeWarningLimit: 500, // chunk 大小警告的限制
        minify: 'terser', // 混淆器，terser构建后文件体积更小
        emptyOutDir: true, //打包前先清空原有打包文件
    },
    css: {
        preprocessorOptions: {
            less: {
                modifyVars: customVariables,
                javascriptEnabled: true,
            },
        },
    },
    define: {
        __INTLIFY_PROD_DEVTOOLS__: false,
        'process.env': process.env,
    },
};
