vite vite.config.js中的配置

vite打包依赖于 rollup和esbuild

rollup中文文档

esbulid中文文档

基本配置


import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";

import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

//告诉 Vite 打包后的产物哪些 dependencies 需要在页面入口 html 文件中随 public 目录(或 CDN)引入
import htmlConfig from "vite-plugin-html-config"; 

//告诉vite什么 dependencies 不参与打包
import { viteExternalsPlugin } from "vite-plugin-externals"; 
// https://vitejs.dev/config/
import { fileURLToPath } from "url";
const filename = fileURLToPath(
    import.meta.url);
// 跟目录
const _dirname = path.dirname(filename);

export default ({ mode }) => {
    // console.log(loadEnv(mode, process.cwd()).VITE_APP_BASE_API, "api");
    return defineConfig({
        define: {
            "process.env": process.env
        },

        // 插件配置
        plugins: [
            vue(),
          
            AutoImport({
                resolvers: [
                    ElementPlusResolver({
                        importStyle: true,
                    }),
                ],
            }),

            Components({
                resolvers: [
                    ElementPlusResolver({
                        importStyle: true,
                    }),
                ],
            }),

            // 这里表示 xxxx不参与打包
            viteExternalsPlugin({
                xxxx: "xxxx",
            }),

            // 引入本地库 xxxx一般放在 public下
            htmlConfig({
                headScripts: [{
                        src: "/xxxx/xxxx.js",
                    },
                    
                ],
                links: [{
                    rel: "stylesheet",
                    href: "/xxxx/xxxx.css",
                }, ],
            }),
        ],
        base: "./",
        publicDir: "public",
        productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
        //设置的别名
        resolve: {
            // 如果报错__dirname找不到,需要安装node,
            // 执行npm i @types/node --save-dev
            alias: {
                "@": path.resolve(_dirname, "./src"),
                "@assets": path.resolve(_dirname, "./src/assets"),
                "@utils": path.resolve(_dirname, "./src/utils"),
                "@components": path.resolve(_dirname, "./src/components"),
            },
        },
        // 服务配置
        server: {
            port: 3002, // 端口号
            open: true, // 自动在浏览器打开
            host: "0.0.0.0",
            https: false, // 是否开启 https,
            proxy: {
                "/api": {
                    target: loadEnv(mode, process.cwd()).VITE_APP_BASE_API,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/api/, ""),
                },

            },
        },
        
        build: {
            minify: false,
            // 进行压缩计算
            brotliSize: false,
            //指定输出路径
            assetsDir: "./",
            // 指定输出文件路径
            outDir: "dist",
            // 代码压缩配置
            terserOptions: {
                // 生产环境移除console
                compress: {
                    drop_console: true,
                    drop_debugger: true,
                },
            },
            // chunkSizeWarningLimit: 1500,大文件报警阈值设置,不建议使用
            rollupOptions: {
                output: {
                    //静态资源分类打包
                    chunkFileNames: "static/js/[name]-[hash].js",
                    entryFileNames: "static/js/[name]-[hash].js",
                    // assetFileNames: "static/[ext]/[name]-[hash].[ext]",
                    assetFileNames(assetInfo) {

                        // 判断后缀分别放到不用的文件夹中
                        if (assetInfo.name.endsWith('.css')) {
                            return "static/css/[name]-[hash].[ext]"
                        }
                        if (["png", "jpg", "svg", "PNG"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/img/[name]-[hash].[ext]"
                        }
                        if (["ttf", "woff", "woff2"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/fonts/[name]-[hash].[ext]"
                        }
                        return "static/css/[name]-[hash].[ext]"
                    },
                    manualChunks(id) {
                        //静态资源分拆打包
                        if (id.includes("node_modules")) {
                            return id
                                .toString()
                                .split("node_modules/")[1]
                                .split("/")[0]
                                .toString();
                        }
                    },
                },
            },
        },
    });
};

 组件自动引入

import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
// 使用

plugins: [

AutoImport({
    resolvers: [
        ElementPlusResolver({
            importStyle: true,
        }),
    ],
}),
Components({
    resolvers: [
        ElementPlusResolver({
            importStyle: true,
        }),
    ],
})
]

固化版本,cdn引入和不进行打包的插件

这个插件是告诉 vite,在构建时,告诉 rollup 不要对 elementPlus这个包进行打包,而是在 index.html 中定义一个全局对象 elementPlus,定义到 window 上。


import { viteExternalsPlugin } from "vite-plugin-externals"; 

// 使用


plugins: [
    viteExternalsPlugin({
        elementPlus: "elementPlus",
    })
]

vite-plugin-html-config 这个插件可以在开发时(dev script)和构建时(build script)修改 index.html,注入一些 <link><script> 等 html 标签,支持加入 js 脚本

一般都是配个上一个 vite-plugin-externals 使用的 这样做的目的是为了 ,固化版本(我这里以elementplus为例)。

import htmlConfig from "vite-plugin-html-config";

//使用

 plugins: [
 htmlConfig({
    headScripts: [{
        src: "/element/elementPlus.js",
    }],
    links: [{
        rel: "stylesheet",
        href: "/element/elementPlus.css",
    }, ]
})]

设置别名

resolve: {
    // 如果报错__dirname找不到,需要安装node,
     // 执行npm i @types/node --save-dev
    alias: {
        "@": path.resolve(_dirname, "./src"),
        "@assets": path.resolve(_dirname, "./src/assets"),
        "@utils": path.resolve(_dirname, "./src/utils"),
        "@components": path.resolve(_dirname, "./src/components"),
    },
},

打包 分配包 rollupOptions.output

output.entryFileNames 该选项用于指定 chunks 的入口文件模式,也就是定义默认index.html引入如的index.js,是个字符串也可以是个函数(函数输出也是字符串)

output.chunkFileNames  分包时候会配合manualChunks 用到,是个字符串也可以是个函数(函数输出也是字符串)

output.assetFileNames 处理静态文件的打包后的位置,如css 和图片等其他文件可以通过这个属性进行分包

outpuy.manualChunks 分割打包,也就是将引入的几个js打包到一个js里,默认会打包到一个js里面,可能最终的代码非常大。从而影响加载时间,所以采取分包,会解决这个问题

build:{    
        rollupOptions: {
                output: {

                     entryFileNames: "static/js/[name]-[hash].js",
                    //静态资源分类打包
                    chunkFileNames: "static/js/[name]-[hash].js",
                   
                    // assetFileNames: "static/[ext]/[name]-[hash].[ext]",
                    assetFileNames(assetInfo) {

                        // 判断后缀分别放到不用的文件夹中
                        if (assetInfo.name.endsWith('.css')) {
                            return "static/css/[name]-[hash].[ext]"
                        }
                        if (["png", "jpg", "svg", "PNG"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/img/[name]-[hash].[ext]"
                        }
                        if (["ttf", "woff", "woff2"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/fonts/[name]-[hash].[ext]"
                        }
                        return "static/css/[name]-[hash].[ext]"
                    },
                    manualChunks(id) {
                        //静态资源分拆打包
                        if (id.includes("node_modules")) {
                            return id
                                .toString()
                                .split("node_modules/")[1]
                                .split("/")[0]
                                .toString();
                        }
                    },
                },
            }
    }

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vite,可以使用vue.config.js文件来配置Vue项目的路径别名等选项。你可以在该文件使用import { defineConfig } from 'vite'来引入配置函数defineConfig。然后,可以使用export default defineConfig({...})来导出一个包含配置选项的对象。比如,可以使用插件vite-plugin-vue来配置Vue的路径别名,可以在plugins选项添加该插件。此外,还可以在server选项配置本地运行的相关设置,如主机名、端口号、自动打开浏览器等。一个简单的vue.config.js配置示例如下: ```javascript import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [ vue() ], server: { host: 'localhost', port: 8080, open: true, https: false, }, }); ``` 这样,你就可以在vue.config.js配置Vite项目的一些选项了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [关于 vite.config.js 相关配置,拿走不谢](https://blog.csdn.net/weixin_43880397/article/details/121848881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue.config.js配置Vue的路径别名的方法](https://download.csdn.net/download/weixin_38678796/12928335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vite.config.js配置(大坑)](https://blog.csdn.net/weixin_44933280/article/details/121212333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值