首页 > 其他分享 >webpack+vue2 升级 vite+vue2 记录

webpack+vue2 升级 vite+vue2 记录

时间:2024-10-18 15:47:56浏览次数:1  
标签:vue js webpack vue2 path import vite

2024 年了,webpack 构建的 vue2 项目,由于路由较多,每次修改都会出现编译时间较长的问题(平均 10~40 秒),长期开发的话,非常的不友好。因此决定升级 vite构建。参考了几篇文章,基本 每篇遇到的坑都不少。

本文做一个记录。

主要是各个依赖的版本问题。

全局安装的 vite 版本,建议版本 4.5.3,因为这是对 vue2 能支持的最高版本了。

"vite": "^4.5.3",

vue建议使用2.7.x,既能对 setup 有支持,而且,完全支持 vue2 的特性。

"vue": "^2.7.14",

同时,必备的 vite 对 vue2 的支持插件 2.3.x

"@vitejs/plugin-vue2": "2.3.1",

sass 版本,建议使用 1.76,因为高于这个版本,@import 语法以及嵌套插入父元素属性的写法会被标记为不推荐,出现大量的警告。

 "sass": "1.76",

额外的,我们很大概率为了优化首屏加载速度,可能会用到 cdn,那就使用插件

"vite-plugin-cdn-import": "^1.0.1",

最后附上用到的 package.json 以及 vite.config.js 配置

{
  "name": "basic-ui",
  "version": "4.0.0",
  "private": true,
  "scripts": {
    "pre": "cnpm install || yarn --registry https://registry.npmmirror.com/ || npm install --registry https://registry.npmmirror.com/ ",
    "dev": "vite",
    "build": "vite build --mode production"
  },
  "dependencies": {
    "@chenfengyuan/vue-qrcode": "^1.0.1",
    "@riophae/vue-treeselect": "0.4.0",
    "@sscfaith/avue-form-design": "1.3.12",
    "autoprefixer": "^10.4.20",
    "avue-plugin-ueditor": "^0.2.18",
    "axios": "^0.18.0",
    "babel-polyfill": "^6.26.0",
    "classlist-polyfill": "^1.2.0",
    "clipboard": "^2.0.4",
    "codemirror": "^5.53.2",
    "crypto-js": "^3.1.9-1",
    "dayjs": "^1.11.13",
    "echarts": "^4.2.1",
    "element-ui": "2.12.0",
    "js-cookie": "^2.2.0",
    "less-loader": "^6.0.0",
    "nprogress": "^0.2.0",
    "qs": "^6.13.0",
    "script-loader": "^0.7.2",
    "sockjs-client": "1.0.0",
    "stomp-websocket": "2.3.4-next",
    "vue": "^2.7.14",
    "vue-axios": "^2.1.2",
    "vue-clipboard2": "^0.3.0",
    "vue-cron": "^1.0.9",
    "vue-echarts": "^4.0.1",
    "vue-json-editor": "^1.2.3",
    "vue-json-tree-view": "^2.1.4",
    "vue-quill-editor": "3.0.6",
    "vue-router": "^3.0.2",
    "vuex": "^3.0.1"
  },
  "devDependencies": {
    "@vitejs/plugin-vue2": "2.3.1",
    "benz-amr-recorder": "^1.0.14",
    "chai": "^4.1.2",
    "sass": "1.76",
    "vite": "^4.5.3",
    "vite-plugin-cdn-import": "^1.0.1",
    "vue-template-compiler": "^2.6.10",
    "vue-video-player": "^5.0.2"
  },
  "lint-staged": {
    "*.js": [
      "vue-cli-service lint",
      "git add"
    ],
    "*.vue": [
      "vue-cli-service lint",
      "git add"
    ]
  }
}

 

vite.config.js

/**
 * 配置参考:
 * https://cli.vuejs.org/zh/config/
 */
import path from "path";
import { defineConfig } from "vite";
import Vue from "@vitejs/plugin-vue2";
import { Plugin as importToCDN } from "vite-plugin-cdn-import";

const url = "http://to.youer.server:8090";
export default defineConfig({
  // 开发或生产环境服务的公共基础路径,用于指定项目中静态资源的基本路径
  base: "/",
  css: {
    preprocessorOptions: {
      scss: {
        api: "modern", // or 'modern'
      },
    },
  },
  optimizeDeps: {
    include: ["vue-cropper", "wangeditor"],
  },
  // 构建选项
  build: {
    target: "es2015",
    // 指定输出路径(相对于 项目根目录).
    outDir: "dist",
    // 指定生成静态资源的存放路径(相对于 build.outDir)。在 库模式 下不能使用。
    assetsDir: "static",
    // 构建后是否生成 source map 文件
    sourcemap: false,
    minify: "terser",
    terserOptions: {
      compress: {
        drop_console: true, //打包时删除console
        pure_funcs: ["console.log"],
        drop_debugger: true, //打包时删除debugger
      },
      output: {
        comments: true, // 打包时删除注释
      },
    },
  },
  server: {
    open: true,
    disableHostCheck: true,
    port: 5186,
    host: "0.0.0.0",
    proxy: {
      "/api": {
        target: url,
        ws: false, // 需要websocket 开启
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
      // 3.5 以后不需要再配置
    },
  },
  resolve: {
    alias: [
      {
        find: /^~/,
        replacement: "",
      },
      {
        find: "@",
        replacement: path.resolve(__dirname, "src"),
      },
    ],
    // 导入时想要省略的扩展名列表,默认值['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']
    // 官方文档中说:不建议忽略自定义导入类型的扩展名(例如:.vue),因为它会影响 IDE 和类型支持
    extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
  },
  plugins: [
    Vue(),
    importToCDN({
      modules: [
        {
          name: "vue",
          var: "Vue",
          path: "https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js",
        },
        {
          name: "element-ui", // package.json 中依赖的名称,
          var: "ELEMENT", // 全局变量名,根据包里的变量设定,无法自定义
          path: "https://cdn.jsdelivr.net/npm/[email protected]/lib/index.min.js", // CDN 链接
          css: "https://cdn.jsdelivr.net/npm/[email protected]/lib/theme-chalk/index.min.css", // 依赖有css就填,没有就去掉这个
        },
      ],
    }),
    // ViteRequireContext(), // 亲测有效,兼容require.context
    // transformScss(), // 亲测有效,但是不推荐,建议全局替换deep
    // vueJsx()
  ],

});

 

标签:vue,js,webpack,vue2,path,import,vite
From: https://www.cnblogs.com/aleafo/p/18474436

相关文章

  • 祝福版的3D标签云动画特效VUE2版本
    <script>exportdefault{name:"dreamView",data(){return{words:['健康码常绿','股票飙红','生意兴隆','财源广进','心想事成','永远十八......
  • Vue2 - 详细实现安装引入百度地图并查询展示周边交通/教育/医疗/商场/生活/娱乐等POI
    前言Vue3版本,请访问在vue2|nuxt2项目开发中,详解高德地图根据当前定位获取周边附近的商圈,vue2高德地图获取周边商圈并将这些地址位置列出来供用户点击跳转和选择,获取当前位置或指定区域周边的交通出行、学校教育、医院诊所、商场购物、生活娱乐、旅游景点、酒店民宿......
  • 【Vue】Vue2(11)
    文章目录1vuex1.1概念1.2什么时候使用Vuex1.3工作原理图1.4vuex核心概念和API1.4.1state1.4.2actions1.4.3mutations1.4.4getters2求和案例_纯vue版2.1静态页面2.2Count.vue2.3App.vue2.4main.js3求和案例_vuex3.1Count.vue3.2store文件夹下:index......
  • 初探Vue2:基础概念与实践指南
    通过记录自己在学习Vue2的过程中的实践经历,复盘项目中的技术应用,巩固Vue2的知识要点,并分享职场中的感悟和心得Vue2简介定义Vue.js,简称Vue,是一个渐进式JavaScript框架,它专注于构建用户界面,易于上手的同时,也能在复杂的应用场景中发挥强大的功能。特点Vue2的核心特点包括:响......
  • Vue3也能用上Vue2写的组件
    文章目录     文章目录概要整体架构流程参考博客实现效果图技术细节小结概要需求:开发一个问题反馈组件,要求企微连线负责人、跳转页面反馈问题...组件可以安装在Vue2、Vue3、React等项目里整体架构流程创建webpack-simple项目,编写组件,部署并发布npm包......
  • vite+ts搭建的项目,@配置失效的解决办法
    今天创建新项目,按照往常的管理去配置@别名安装依赖:因为path是node中的模块,node又不支持ts,所以:yarnadd@types/node或者npmi@types/node然后进vite.config.ts,添加添加@别名resolve:{alias:{'@':resolve(__dirname,'src')}}其实到这里,就可以......
  • vue3+vite+ts+vue3-qr-reader实现移动端h5+pc端调起摄像头核销二维码
    1、首先我们看示例图:h5:pc:  2、我们开始做第一步就是装依赖:yarnadd vue3-qr-reader或者npminstall vue3-qr-reader我记得装完后还需要装一个 yarnadd-Dsass 3、封装一个组件公用:组件位置你们自己定我写在了components/QrScanner/ind......
  • tauri2.0-admin桌面端后台系统|tauri2+vite5+element-plus管理后台EXE程序
    原创Tauri2.0+Vue3+ElementPlus客户端通用后台管理系统Tauri2Admin。tauri2-vue3-admin基于最新跨平台框架Tauri2.0整合Vite5+Vue3全家桶搭建的一款轻量级桌面端后台管理系统模板。封装tauri2多窗口切换管理,提供4种通用布局模板,支持vue-i18n国际化、面包屑导航、多标签快捷路......
  • vite 使用rollup 打包为什么比webpack打包更小呢
    Rollup和Webpack之间的差异在于它们的打包方式和优化策略,这导致了Rollup通常能生成更小的包体积。以下是一些主要原因:1.树摇(TreeShaking)Rollup对ES6模块的静态结构分析非常出色,能够有效地删除未使用的代码。这一过程被称为树摇(TreeShaking),能显著减小最终包的体积。2......
  • Vue2+ECharts+Mock.js实现前端后台通用管理系统页面
    一、前言  在现代Web开发中,前端框架与数据可视化工具的结合能够显著提升用户体验。本文将介绍如何使用Vue2和ECharts构建一个通用的后台管理系统页面。利用Vue2的组件化特性,可以高效管理应用状态与UI交互,而ECharts则提供多样的图表类型,便于展示数据分析结果。通过整合这两......