create-react-app 迁移到vite使用 pc和h5共存

背景

create-react-app 由于升级 使用webpack5 导致postcss配置不生效。想使用postcss-px-to-viewport-8-plugin 等一系列的h5适配插件解决方案都不生效。

最后决定迁移到vite使用

vite官网 为什么选 Vite | Vite 官方中文文档

vite 脚手架 创建项目 https://github.com/vitejs/vite/tree/main/packages/create-vite

我使用的是 react-ts 的模板  Vitejs - Vite (forked) - StackBlitz

vite.config.ts 配置如下

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import viteCompression from 'vite-plugin-compression';
import path from "path"
import svgr from "vite-plugin-svgr";
import autoprefixer from "autoprefixer"
import postcssPxToViewport from "postcss-px-to-viewport-8-plugin"
import requireTransform from 'vite-plugin-require-transform';
import legacy from '@vitejs/plugin-legacy'
import sassDts from 'vite-plugin-sass-dts'
// import vitePluginAliOss from 'vite-plugin-ali-oss'
// const options = {
//   region: '<Your Region>'
//   accessKeyId: '<Your Access Key ID>',
//   accessKeySecret: '<Your Access Key Secret>',
//   bucket: '<Your Bucket>'
// }
// const prod = process.env.NODE_ENV === 'production'
function resolve(name) {
  return path.join(__dirname,name)
}

export default defineConfig({
  resolve: {
    alias: {
      '@': resolve('./src')
    },
    extensions: ['.ts', '.tsx','.jsx','.js', '.json']
  },
  css: {
    postcss: {
      plugins: [
        autoprefixer(),
        postcssPxToViewport({
          unitToConvert: "px",
          viewportWidth: 750,
          unitPrecision: 3,
          propList: ["*"],
          viewportUnit: "vw",
          fontViewportUnit: "vw",
          selectorBlackList: [],
          minPixelValue: 1,
          mediaQuery: false,
          replace: true,
          exclude: [/node_modules/,/^(?!.*h5)/],
          landscape: false,
        })
      ]
    }
  },

  // base: prod ? 'https://konnect.chat/' : '/', // must be URL when build

  plugins: [
    sassDts(),
    legacy({
      targets: ['defaults', 'not IE 11'],
    }),
    react(),
    viteCompression({
      deleteOriginFile: false
    }),
    svgr(),
    requireTransform({}),
    // vitePluginAliOss(options)
  ],
  build: {
    target: 'es2015',
    cssTarget: 'chrome80',
    minify: "terser", // 必须开启:使用terserOptions才有效果
    terserOptions: {
      compress: {
        keep_infinity: true,  // 防止 Infinity 被压缩成 1/0,这可能会导致 Chrome 上的性能问题
        drop_console: true,   // 生产环境去除 console
        drop_debugger: true   // 生产环境去除 debugger
      },
    },
    chunkSizeWarningLimit: 2000, // chunk 大小警告的限制(以 kbs 为单位)
    rollupOptions: {
      output: {// 分包
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return 'vendor';
          }
        },
      },
    },
    
  }
})

postcssPxToViewport 插件生效规则为 当存在h5的文件目录的时候才会去转换 

做到pc和h5共存

简单模板 https://github.com/ChengYu08/vite-ts-init

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥呀呀呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值