123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import { defineConfig } from 'vite'
- import vue from '@vitejs/plugin-vue'
- import autoprefixer from 'autoprefixer' // css自动添加兼容性前缀
- import WindiCss from 'vite-plugin-windicss' // css便捷样式库
- import path from 'path'
- import legacy from '@vitejs/plugin-legacy' // 兼容web低版本浏览器插件
- import { getProcessEnv } from './src/global/env' // 获取项目请求地址
- const timeStamp = new Date().getTime() // 为每次打包的文件新增当前的时间戳,防止页面缓存的问题
- // 全局自动注册components中的组件,需要使用到其中的组件无需import导入,直接使用即可
- import Components from 'unplugin-vue-components/vite'
- import { VantResolver } from 'unplugin-vue-components/resolvers'
- import postcsspxtoviewport from 'postcss-px-to-viewport'
- export default defineConfig({
- // 如果是线上则用 ./ 否则本地用 / ,如果不配置这个上线后静态资源会访问不到
- base: process.env.NODE_ENV === 'production' ? './' : '/',
- server: {
- host: '0.0.0.0',
- port: 5173,
- proxy: {
- '^/api': {
- target: `${getProcessEnv('SERVER_URL') || ''}`, //目标源,目标服务器,真实请求地址
- changeOrigin: true, //支持跨域
- rewrite: path => path.replace(/^\/api/, '/api'), //重写真实路径,替换/api
- },
- },
- },
- css: {
- postcss: {
- plugins: [
- // 浏览器兼容性
- autoprefixer({
- overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8'],
- }),
- postcsspxtoviewport({
- unitToConvert: 'px', // 要转化的单位
- viewportWidth: 750, // UI设计稿的宽度,如果你的设计稿是375就改成375
- viewportHeight: 1334, // (Number) The height of the viewport. IOS6/7/8
- unitPrecision: 6, // 转换后的精度,即小数点位数
- propList: ['*'], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
- viewportUnit: 'vw', // 指定需要转换成的视窗单位,默认vw
- fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位,默认vw
- selectorBlackList: ['ignore-'], // 指定不转换为视窗单位的类名,
- minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
- mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
- replace: true, // 是否转换后直接更换属性值
- exclude: [/node_modules\/vant/], // 设置忽略文件,用正则做目录名匹配
- landscape: false, // 是否处理横屏情况
- }),
- ],
- },
- // css预处理器
- preprocessorOptions: {
- scss: {
- // 引入 variables.scss 这样就可以在全局中使用 variables.scss中预定义的变量了
- // 给导入的路径最后加上 ;
- additionalData: '@import "@/assets/scss/variables.scss";',
- },
- },
- },
- plugins: [
- vue(),
- WindiCss(),
- // 兼容web低版本浏览器插件 1
- legacy({
- targets: ['cover 99.5%'],
- }),
- // 全局自动注册components中的组件,需要使用到其中的组件无需import导入,直接使用即可
- Components({
- dts: true,
- resolvers: [VantResolver()],
- }),
- ],
- // 兼容web低版本浏览器插件
- optimizeDeps: {
- include: ['core-js', 'vant', 'axios', 'pinia', 'vue', 'vue-router'],
- },
- //路径别名 alias
- resolve: {
- alias: {
- '@': path.resolve(__dirname, './src'), //把 src 的别名设置为 @
- '@/assets': path.resolve(__dirname, './src/assets'),
- },
- extensions: ['.mjs', '.ejs', '.tsx', '.jsx', '.js', '.json', '.ts'], // 这些类型的文件后缀的不需要写
- },
- build: {
- outDir: path.resolve(__dirname, 'dist'), // 打包输出文件夹
- sourcemap: false,
- assetsInlineLimit: 4096, //小于此阈值 kb 的导入或引用资源将内联为 base64 编码
- emptyOutDir: true, // 每次构建时清除dist目录
- rollupOptions: {
- output: {
- entryFileNames: `js/[name]-[hash].${timeStamp}.js`, // 入口文件输出的文件夹名称
- chunkFileNames: `js/[name]-[hash].${timeStamp}.js`, //chunk包输出的文件夹名称
- assetFileNames: `[ext]/[name]-[hash].${timeStamp}.[ext]`, //静态文件输出的文件夹名称
- },
- },
- chunkSizeWarningLimit: 1300,
- minify: 'terser',
- cssCodeSplit: true,
- },
- })
|