webpack项目转为vite

米阳 2023-5-6 382 5/6

背景

最近公司有新项目,在技术选型上选择了vite+vue3,vite的好处就不多说了 ,新项目创建后运行报错,本地node版本太老了,升级node后可以运行了但是以前的其他项目没法运行和打包了,没办法又装了nvm,切换node版本来运行不同项目,但是Jenkins部署测试时出问题了本地一样的问题,node版本太旧,服务器上安装了nvm但是一直运行报错,应该是环境变量问题,最后我决定把以前的项目都改成vite打包,统一node版本这样我本地运行也轻松点而且运行和打包速度都会变快,下面是其中某个移动端项目的完整升级过程

创建vite+vue项目

//创建
$ npm create vite@latest

? Project name:  输入项目名

选择框架
? Select a framework: » - Use arrow-keys. Return to submit.
>   vanilla // 原生js
    vue     // vue3
    react   // react
    preact  // 轻量化react框架
    lit     // 轻量级web组件
    svelte  // svelte框架

这里需要选择的是vanilla,因为选择vue直接创建的就是vue3项目 我要用vue2

? Select a variant: >>Use arrow-keys. Return to submint.
       TypeScript
>      JavaScript
如果你要用typescript的话就选着TypeScript

安装vue2插件

$ npm install vite-plugin-vue2 -D

根目录下创建vite.config.js文件引入vite-plugin-vue2

//vite.config.js 
import { defineConfig, loadEnv } from 'vite'
import { createVuePlugin } from 'vite-plugin-vue2'
export default defineConfig(({ command,mode  }) => {
  return {
    base: '/',
    plugins: [ createVuePlugin() ],
  }
})

依赖目录搬过来安装依赖

查看以前的package.json 将用到的依赖以及对应版本号复制到新项目的package.json里,关于webpack的都去掉,我是顺便把没用的依赖删了些,主要的有

"dependencies": {
    "axios": "0.27.2",
    "postcss-px-to-viewport-8-plugin": "^1.2.5",
    "qs": "^6.8.0",
    "vant": "^2.10.4",
    "vue": "^2.6.10",
    "vue-meta-info": "^0.1.7",
    "vue-router": "^3.5.1",
    "vuex": "^3.0.1"
  },
  "devDependencies": {
    "@vant/area-data": "^1.1.1",
    "less": "^4.2.0",
    "less-loader": "^12.2.0",
    "stylus": "^0.54.5",
    "stylus-loader": "^3.0.2",
    "vite": "2.6.14",
    "vite-plugin-compression": "0.5.1",
    "vite-plugin-html": "^3.2.2",
    "vite-plugin-vue2": "^2.0.3"
  }

其实主要的 axios,qs,vant,vue,vue-router 有就行,请根据自己项目需求增删依赖。

其实less和stylus选用一种就行,本项目涉及东西太多没时间处理样式问题了只好两种都用

依赖目录调整完后直接 npm install 看看如果报错了就调整你的各个依赖的版本,大概率问题就是出在你的依赖版本上

调整目录结构

将新项目根目录下的main.js 和 counter.js、style.css删掉,将以前老项目的src目录下的文件全都复制过来,然后调整入口文件引入文件的地址

webpack项目转为vite

入口文件的main.js改为引用src中的main.js,修改后运行npm run dev 然后大概率可能会报错  require is not defined,点击这里查看解决方案

Uncaught ReferenceError: require is not defined   

移动端适配处理

以前老项目适配是用的vw方案 750的设计图使用的stylus 公共方法,所以整个项目中样式单位都是用的vm()

vm($px){
   ($px / 750) * 100vw
}

现在有了更优雅的写法用新的插件 postcss-px-to-viewport-8-plugin

//打开 vite.config.js

import postcssPxToViewport8Plugin from 'postcss-px-to-viewport-8-plugin'

export default defineConfig(({ command,mode  }) => {
  return {
    css: {
      postcss: {
        plugins: [
          postcssPxToViewport8Plugin({
            viewportWidth: (file)=> {
              let num = 750
              if(file.indexOf('vant')>-1){  //处理兼容 vant 库 如果你的设计图也是375的那可以忽略这里 直接写死 375就好
                num = 375
              }
              return num;
            },
          }),
        ]
      }
    }
  }
})

vscode 全局正则搜索

适配插件引入了但是项目中样式单位还是vm 总不能一个一个修改吧.......

当然不是,可以用 vscode 全局正则搜索,替换具体方法移步到这里查看VSCode正则查找替换

以上的都操作完可以运行了,这就是自己摸索的更换打包工具的整个过程,希望对你有所帮助,如果遇到其他问题可以留言,大家一起讨论

 

 

 

- THE END -

米阳

10月24日11:16

最后修改:2024年10月24日
0

非特殊说明,本博所有文章均为博主原创。