vue3+vite 配置

vue3 和 vite 配置

一、开发相关配置

1、配置路径别名 alias
import { fileURLToPath, URL } from "node:url";
resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url))
    }
  },
2、代理配置 Proxy
server: {
    open: false,
    port: 3005,
    host: "0.0.0.0",
    proxy: {
      "/api": {
        target: "https://baidu.com/api/",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, "")
      },
      "/ws-api": {
        target: "wss://baidu.com/api",
        changeOrigin: true, //是否允许跨域
        ws: true
      }
    }
}
3、prettier 配置
export default {
  printWidth: 100, // 每行代码长度(默认80)
  tabWidth: 2, // 每个tab相当于多少个空格(默认2)ab进行缩进(默认false)
  useTabs: false, // 是否使用t
  singleQuote: true, // 使用单引号(默认false)
  semi: true, // 声明结尾使用分号(默认true)
  trailingComma: 'all', // 多行使用拖尾逗号(默认none)
  bracketSpacing: true, // 对象字面量的大括号间使用空格(默认true)
  jsxBracketSameLine: false, // 多行JSX中的>放置在最后一行的结尾,而不是另起一行(默认false)
  // 箭头函数参数括号 默认avoid 可选 avoid| always
  // avoid 能省略括号的时候就省略 例如x => x
  // always 总是有括号
  arrowParens: 'avoid',
  endOfLine: 'auto',  // 因为prettier的规范和eslint的换行规则不同,所以这个必须配置。要不然每次打开文件都会有一堆的警告
}

二、打包相关配置

1、全局变量和多环境配置
// .env;
# 页面标题
VITE_APP_TITLE = "vuve3"
# 开发环境配置
VITE_APP_ENV = 'development'
# 开发环境
VITE_APP_BASE_API = '/dev-api'
# 基础路由
VITE_APP_BASE_URL = '/myapp'
#打包后目录
VITE_APP_outDir = "dev_dist"

// .evn.production
# 页面标题
VITE_APP_TITLE = "文旅地图"
# 开发环境配置
VITE_APP_ENV = 'porduction'
# /开发环境
VITE_APP_BASE_API = '/prod-api'
# 基础路由
VITE_APP_BASE_URL = '/myapp'
#打包后目录
VITE_APP_outDir = "porduction_dist"

// .env.devbuild

// package.josn 中配置指定那个环境配置使用 --mode devbuild
"scripts": {
    "dev": "vite",
    "build": "vite build",
    "build:dev":"vite build --mode devbuild",
    "preview": "vite preview",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
  },

https://cn.vitejs.dev/guide/env-and-mode.html#env-files
https://cn.vitejs.dev/config/
import { defineConfig, loadEnv } from "vite";
export default defineConfig(({command, mode}) => {
    // 根据当前工作目录中的 `mode` 加载 .env 文件
    const env = loadEnv(mode, process.cwd());
});

2、浏览器兼容性问题

vue3 不再兼容ie

3、gzip 压缩打包配置
    vite-plugin-compression
    import viteCompression from 'vite-plugin-compression';
    targets:[viteCompression()]
4、cdn 配置
vite-plugin-cdn2
vite-plugin-cdn-import2
等插件包
5、图片压缩
国内安装报错解决方法
使用yarn在package.json内配置(推荐)
"resolutions": {
    "bin-wrapper": "npm:bin-wrapper-china"
}
vite-plugin-compression

6、scss 使用
https://cn.vitejs.dev/guide/features.html

npm add -D sass

三、通用配置

import { fileURLToPath, URL } from "node:url";
import { defineConfig,mode } from "vite";
import vue from "@vitejs/plugin-vue";
import legacy from '@vitejs/plugin-legacy'
import viteCompression from 'vite-plugin-compression';
import viteImagemin from 'vite-plugin-imagemin'

//https://github.com/vbenjs/vite-plugin-compression/blob/main/README.zh_CN.md  gzip 压缩
//https://github.com/vbenjs/vite-plugin-imagemin/blob/main/README.zh_CN.md  图片压缩
//npm i sass-loader sass -D

// https://vitejs.dev/config/
export default defineConfig(({command, mode}) => {
  // 根据当前工作目录中的 `mode` 加载 .env 文件
  const env = loadEnv(mode, process.cwd());
  console.log("配置",env);
  return  {
    // 打包后 静态资源路径前缀 index.html中的链资源会加上这个前缀
    // 如: <link rel="modulepreload" crossorigin href="/myapp/assets/vue-router-1b19bf1b.js">
    base: env.VITE_APP_BASE_URL,
    plugins: [
      vue(),
      legacy({ targets: ["defaults", "not IE 11"] }),
      viteImagemin({
        verbose: true,
        gifsicle: {
          optimizationLevel: 3,
          interlaced: false
        },
        optipng: {
          optimizationLevel: 7
        },
        mozjpeg: {
          quality: 50
        },
        pngquant: {
          quality: [0.6, 0.9],
          speed: 4
        },
        svgo: {
          plugins: [
            {
              name: "removeViewBox"
            },
            {
              name: "removeEmptyAttrs",
              active: false
            }
          ]
        }
      }),
      viteCompression({ ext: ".gz", algorithm: "gzip", deleteOriginFile: false })
    ],
    resolve: {
      alias: {
        "@": fileURLToPath(new URL("./src", import.meta.url))
      }
    },
    build: {
      sourcemap: false,
      /*
        公共基础路径, 路由配置 history: createWebHistory(import.meta.env.VITE_APP_BASE_URL)
        如: www.xxx.com/myapp/
        ng 部署在myapp目录下
      */
      outDir: env.VITE_APP_outDir, //打包后的输出目录
      assetsInlineLimit: 4096,
      chunkSizeWarningLimit: 1024 * 2,
      rollupOptions: {
       //  external: ['vue', 'vuex', 'vueRouter' ], // 不打包这几项;单独引入cdn
        output: {
          manualChunks(id) {
            if (id.includes("node_modules")) {
              return id.toString().split("node_modules/")[1].split("/")[0].toString();
            }
          }
        }
      }
    },
    server: {
      open: false,
      port: 3006,
      host: "0.0.0.0"
      // proxy: {
      //   "/api": {
      //     target: "https://test-api.test.com/api/",
      //     changeOrigin: true,
      //     rewrite: (path) => path.replace(/^\/api/, "")
      //   },
      //   "/ws-api": {
      //     target: "wss://test-api.test.com",
      //     changeOrigin: true, //是否允许跨域
      //     ws: true
      //   }
      // }
    }
  };
});

posted @ 2023-01-10 16:12  kgwei  阅读(3361)  评论(0编辑  收藏  举报