vite.config.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import autoprefixer from 'autoprefixer' // css自动添加兼容性前缀
  4. import WindiCss from 'vite-plugin-windicss' // css便捷样式库
  5. import path from 'path'
  6. import legacy from '@vitejs/plugin-legacy' // 兼容web低版本浏览器插件
  7. import { getProcessEnv } from './src/global/env' // 获取项目请求地址
  8. const timeStamp = new Date().getTime() // 为每次打包的文件新增当前的时间戳,防止页面缓存的问题
  9. // 全局自动注册components中的组件,需要使用到其中的组件无需import导入,直接使用即可
  10. import Components from 'unplugin-vue-components/vite'
  11. import { VantResolver } from 'unplugin-vue-components/resolvers'
  12. import postcsspxtoviewport from 'postcss-px-to-viewport'
  13. export default defineConfig({
  14. // 如果是线上则用 ./ 否则本地用 / ,如果不配置这个上线后静态资源会访问不到
  15. base: process.env.NODE_ENV === 'production' ? './' : '/',
  16. server: {
  17. host: '0.0.0.0',
  18. port: 5173,
  19. proxy: {
  20. '^/api': {
  21. target: `${getProcessEnv('SERVER_URL') || ''}`, //目标源,目标服务器,真实请求地址
  22. changeOrigin: true, //支持跨域
  23. rewrite: path => path.replace(/^\/api/, '/api'), //重写真实路径,替换/api
  24. },
  25. },
  26. },
  27. css: {
  28. postcss: {
  29. plugins: [
  30. // 浏览器兼容性
  31. autoprefixer({
  32. overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8'],
  33. }),
  34. postcsspxtoviewport({
  35. unitToConvert: 'px', // 要转化的单位
  36. viewportWidth: 750, // UI设计稿的宽度,如果你的设计稿是375就改成375
  37. viewportHeight: 1334, // (Number) The height of the viewport. IOS6/7/8
  38. unitPrecision: 6, // 转换后的精度,即小数点位数
  39. propList: ['*'], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
  40. viewportUnit: 'vw', // 指定需要转换成的视窗单位,默认vw
  41. fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位,默认vw
  42. selectorBlackList: ['ignore-'], // 指定不转换为视窗单位的类名,
  43. minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
  44. mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
  45. replace: true, // 是否转换后直接更换属性值
  46. exclude: [/node_modules\/vant/], // 设置忽略文件,用正则做目录名匹配
  47. landscape: false, // 是否处理横屏情况
  48. }),
  49. ],
  50. },
  51. // css预处理器
  52. preprocessorOptions: {
  53. scss: {
  54. // 引入 variables.scss 这样就可以在全局中使用 variables.scss中预定义的变量了
  55. // 给导入的路径最后加上 ;
  56. additionalData: '@import "@/assets/scss/variables.scss";',
  57. },
  58. },
  59. },
  60. plugins: [
  61. vue(),
  62. WindiCss(),
  63. // 兼容web低版本浏览器插件 1
  64. legacy({
  65. targets: ['cover 99.5%'],
  66. }),
  67. // 全局自动注册components中的组件,需要使用到其中的组件无需import导入,直接使用即可
  68. Components({
  69. dts: true,
  70. resolvers: [VantResolver()],
  71. }),
  72. ],
  73. // 兼容web低版本浏览器插件
  74. optimizeDeps: {
  75. include: ['core-js', 'vant', 'axios', 'pinia', 'vue', 'vue-router'],
  76. },
  77. //路径别名 alias
  78. resolve: {
  79. alias: {
  80. '@': path.resolve(__dirname, './src'), //把 src 的别名设置为 @
  81. '@/assets': path.resolve(__dirname, './src/assets'),
  82. },
  83. extensions: ['.mjs', '.ejs', '.tsx', '.jsx', '.js', '.json', '.ts'], // 这些类型的文件后缀的不需要写
  84. },
  85. build: {
  86. outDir: path.resolve(__dirname, 'dist'), // 打包输出文件夹
  87. sourcemap: false,
  88. assetsInlineLimit: 4096, //小于此阈值 kb 的导入或引用资源将内联为 base64 编码
  89. emptyOutDir: true, // 每次构建时清除dist目录
  90. rollupOptions: {
  91. output: {
  92. entryFileNames: `js/[name]-[hash].${timeStamp}.js`, // 入口文件输出的文件夹名称
  93. chunkFileNames: `js/[name]-[hash].${timeStamp}.js`, //chunk包输出的文件夹名称
  94. assetFileNames: `[ext]/[name]-[hash].${timeStamp}.[ext]`, //静态文件输出的文件夹名称
  95. },
  96. },
  97. chunkSizeWarningLimit: 1300,
  98. minify: 'terser',
  99. cssCodeSplit: true,
  100. },
  101. })