2022-11-18----------------vite-config-js常用配置

366 阅读3分钟
const path = require("path");
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import copy from 'rollup-plugin-copy' //引入插件

// console.log(loadEnv('development', process.cwd()).VITE_PROXY_URL, process.env) // 123


// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
    console.log(command, mode)
    const userConfig: any = {
        root: process.cwd(),//index文件所在位置
        base: '/',
        mode: 'development', //在配置中指明将会把 serve 和 build 时的模式 都 覆盖掉,也可以通过命令行 --mode 选项来重写。
        publicDir: 'public',//静态资源目录,会打包到outDir文件夹
        cacheDir: 'node_modules/.vite', //存储缓存文件的目录。此目录下会存储预打包的依赖项或 vite 生成的某些缓存文件,你可以使用 --force 命令行选项或手动删除目录
        resolve: {
            alias: {
                "@": path.resolve(__dirname, "src"),
                "~": path.resolve(__dirname, "lib"),
            },
            extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']//导入时想要省略的扩展名列表。注意,不 建议忽略自定义导入类型的扩展名(例如:.vue),因为它会影响 IDE 和类型支持。
        },
        json: {
            namedExports: true,//是否支持从 .json 文件中进行按名导入。
            stringify: false,//若设置为 true,导入的 JSON 会被转换为 export default JSON.parse("..."),这样会比转译成对象字面量性能更好,尤其是当 JSON 文件较大的时候。//开启此项,则会禁用按名导入。
        },
        assetsInclude: ['**/*.gltf', '**/*.fbx'],//是否可以用import导入额外的静态资源
        envDir: 'root',//环境文件目录
        envPrefix: 'VITE_',//环境变量头
        logLevel: 'info',//调整控制台输出的级别,默认为 'info'
        clearScreen: true,//是否清屏
        build: {
            target: 'modules',//构建目标,自定义目标也可以是一个 ES 版本(例如:es2015)、一个浏览器版本(例如:chrome58)或是多个目标组成的一个数组。
            lib: {
                entry: path.resolve(__dirname, "lib/index.ts"),
                name: "ThreeEntity",//暴露的全局变量
                formats: ['es', 'umd'],
                fileName: (format) => `ThreeEntity.${format}.js`,//fileName 是输出的包文件名,默认 fileName 是 package.json 的 name 选项,它还可以被定义为参数为 format 的函数。
            },
            rollupOptions: {
                // 确保外部化处理那些你不想打包进库的依赖
                external: ['vue'],
                output: {
                    // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
                    globals: {
                        vue: "Vue",
                    },
                },
            },
            outDir: "build",//指定输出路径(相对于 项目根目录).
            assetsDir: 'assets',//指定生成静态资源的存放路径(相对于 build.outDir)
            assetsInlineLimit: '4096',//小于此阈值的导入或引用资源将内联为 base64 编码,以避免额外的 http 请求
            cssCodeSplit: true,//启用/禁用 CSS 代码拆分。当启用时,在异步 chunk 中导入的 CSS 将内联到异步 chunk 本身,并在其被加载时插入。
            cssTarget: 'modules',//默认与 build.target 一致
            sourcemap: false,//构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件,。如果为 'inline',source map 将作为一个 data URI 附加在输出文件中。
            //'hidden' 的工作原理与 'true' 相似,只是 bundle 文件中相应的注释将不被保留。
            emptyOutDir: true,//若 outDir 在 root 目录下,则为 true
            watch: {}, //设置为 { } 则会启用 rollup 的监听器。在涉及只用在构建时的插件时和集成开发流程中很常用
        },

        plugins: [vue(),
        copy({
            targets: [
                { src: 'utils/*', dest: 'demo/' }
            ]
        })
        ],
        server: {
            open: 'chrome',
            host: '0.0.0.0',
            port: 3000,
            proxy: {

            },
            force: true,//是否强制构建
            watch: {
                ignored: ['!**/node_modules/your-package-name/**']//监视指定包的更改
            },
        },
        optimizeDeps: {
            exclude: ['your-package-name'],//在预构建中强制排除的依赖项
            include: [],//默认情况下,不在 node_modules 中的,链接的包不会被预构建。使用此选项可强制预构建链接的包。
            keepNames: false,//打包器有时需要重命名符号以避免冲突。 设置此项为 true 可以在函数和类上保留 name 属性。
        }
    }

    return userConfig


});