vue项目中需要常用的插件分享

2026-08-27

VConsole

由腾讯开发的轻量级、可扩展的前端调试面板,特别适用于移动设备上的网页调试。它提供了一个可视化的界面,可以在手机浏览器中显示 JavaScript 日志、网络请求、本地存储等信息

import VConsole from 'vconsole'
new VConsole()

Day.js

一个轻量级的 JavaScript 时间日期处理库,它提供了简洁的 API 来解析、格式化、操作和显示日期和时间。

NProgress

一个轻量级的 JavaScript 库,用于在页面加载或异步操作时显示顶部进度条

import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

NProgress.configure({
  easing: 'ease', // 动画方式
  speed: 500, // 递增进度条的速度
  showSpinner: true, // 是否显示加载ico
  trickleSpeed: 200, // 自动递增间隔
  minimum: 0.3 // 初始化时的最小百分比
})

export default NProgress
import NProgress from 'nprogress'

// 导航开始前
router.beforeEach((to, from) => {
  NProgress.start();
});

// 导航结束后
router.afterEach((to, from) => {
  NProgress.done();
});

echarts

//echarts 引入方式
import * as echarts from 'echarts';

postcss-pxtorem

PostCSS 插件,用于将 CSS 中的 px 单位自动转换为 rem 单位。这在移动端响应式开发中非常有用,特别是采用“Flexible 布局”或“手淘 lib-flexible 方案”时,可以方便地实现不同屏幕尺寸下的等比缩放。

module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 16, // 根元素字体大小,rem相对px转换的基准值,通常为16px
      propList: ['*'], // 需要转换的属性,* 表示对所有属性都进行转换,支持数组、正则等方式
      unitPrecision: 5, // 允许REM单位增长到的最接近的小数点精度
      selectorBlackList: [], // 排除不进行转换的类名
      replace: true, // 是否直接替换(默认为true)
      mediaQuery: false, // 是否转换媒体查询中的px(默认为false)
      exclude: path => {
        // 不进行转换的文件路径(根据返回值判断,返回值为false则此文件不进行转换)
        // return !path.includes('/views/system-dashboard')
      }
    }
  }
};
export default {
  created() {
    this.setFontSize(document, window);
  },
  methods: {
    
    setFontSize(doc, win) {
      let docEl = doc.documentElement;
      //检测浏览器是否支持 orientationchange 事件(主要用于移动设备屏幕旋转)
      //如果支持则使用 orientationchange,否则使用 resize 事件(窗口大小变化)
      let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
      let reCaculate = function() {
        //获取根元素的可视宽度 (clientWidth)
        let clientWidth = docEl.clientWidth;
        if (!clientWidth) {
          return;
        }
        docEl.style.fontSize = 16 * (clientWidth / 1920) + 'px';
        Vue.prototype.$f = clientWidth / 1920;
      };
      if (!doc.addEventListener) {
        return;
      }
      //监听屏幕方向或窗口大小变化事件,触发重新计算
      win.addEventListener(resizeEvt, reCaculate, false);
      //监听 DOM 加载完成事件,确保在页面加载时执行一次计算
      doc.addEventListener('DOMContentLoaded', reCaculate, false);
    }
  }
};



功能总结
这是一个典型的响应式设计解决方案,主要功能包括:

1、动态字体缩放:基于屏幕宽度动态调整根元素字体大小
2、适配不同设备:以1920px为设计基准,自动适配各种屏幕尺寸
3、实时响应:当窗口大小改变时自动重新计算字体大小
4、全局变量提供:通过 Vue.prototype.$f 提供缩放比例供其他组件使用
5、这种方案常用于需要在不同分辨率下保持视觉一致性的PC端管理系统

vue3-seamless-scroll

一个用于 Vue 3 的无缝滚动组件,常用于展示新闻列表、公告、商品列表等需要自动、循环、无停顿滚动的场景。