当前位置: 首页 > news >正文

vue项目的main.js规划设计与合理使用

一、背景简介

  1. 为什么写这么篇文章?

(1)最近刚换了份工作,接手了一个很庞大的项目,16g的内存,项目启动后直接把内存拉到90%

(2)暂且不说项目好坏,项目接口调用中有个调用接口方法this.portService,我看了下vue页面本身和mixins文件,都没有data声明或者引用这个portService,这时候我不禁纳闷,数据到底放在哪里了!!!!此处是重点,他居然把他所有的接口请求封装的js文件都在main.js里全局引入

二、main.js的核心作用与定位

main.js是Vue项目的入口文件,主要负责初始化Vue实例并配置全局设置。作为应用的单一入口点,它承担着创建Vue实例、管理全局配置和依赖的重要职责。在Vue 2中通常使用new Vue()语法,而Vue 3则采用createApp()函数来创建应用实例。

该文件的主要作用可概括为三点:1)实例化Vue;2)放置常用插件和CSS样式;3)存储全局变量。其典型结构包括导入Vue库和根组件、配置路由和状态管理、创建并挂载Vue实例等基本要素

三、适合放入main.js的内容

1. Vue实例初始化配置

main.js最核心的功能是创建和配置Vue实例,包括挂载目标元素(el$mount)、根组件渲染(render函数)等基础配置。这是所有Vue项目main.js必须具备的内容:

import Vue from 'vue'
import App from './App.vue'
new Vue({render: h => h(App)
}).$mount('#app')
2. 全局插件注册

通过Vue.use()注册需要全局使用的插件,如Vue Router、Vuex、Element UI等第三方库。例如Element UI的引入:

import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(Element)
3.全局组件注册

对于频繁使用的公共组件,可在main.js中全局注册以避免重复导入:

import Loading from './components/Loading.vue'
Vue.component('Loading', Loading)
4. 全局过滤器与混入

定义全局过滤器可增强模板功能,实现数据预处理:

import * as filters from './filters'
Object.keys(filters).forEach(key => {Vue.filter(key, filters[key])
})
5. 全局样式与工具库

基础CSS/LESS文件和常用工具库(如axios)适合在main.js引入:

import '@/assets/base.less'
import axios from 'axios'
Vue.prototype.$axios = axios
6. 生产环境配置

禁用生产提示等环境相关配置应置于main.js:

Vue.config.productionTip = false

三、不适合放入main.js的内容

1. 业务逻辑代码

main.js应保持简洁,避免包含具体的业务逻辑实现。业务代码应分散到各组件或模块中。

2. 大量局部组件

非全局使用的组件不应在main.js注册,而应在使用它们的组件内局部注册。

3. 频繁变动的配置

如API地址等可能频繁修改的配置,建议放入专用配置文件而非main.js。

4. 复杂的状态管理

虽然可以引入Vuex,但store的具体实现应放在单独模块中。

5. 过度庞大的第三方库

非必要的重型库应延迟加载或按需引入,避免增加初始包体积。

四、最佳实践建议

  1. 保持简洁‌:main.js应专注于初始化工作,避免过度膨胀。理想情况下不应超过200行代码。

  2. 模块化组织‌:将相关配置拆分到单独文件(如过滤器、混入等),再在main.js中统一引入。

  3. 版本适配‌:Vue 2与Vue 3的main.js结构不同,需注意语法差异。

  4. 环境隔离‌:使用create-vue等工具隔离依赖,避免全局污染。

  5. 合理注释‌:对各项配置添加必要注释,说明用途和修改记录。

通过合理规划main.js的内容结构,可以构建出更清晰、更易维护的Vue项目架构,为后续开发奠定良好基础


文章转载自:

http://3j5vGddk.dxqwm.cn
http://VE1ycb3z.dxqwm.cn
http://cgZvi84F.dxqwm.cn
http://cqBjJGtb.dxqwm.cn
http://cjOwwu7W.dxqwm.cn
http://dD4bmtHW.dxqwm.cn
http://6e7Qdmnr.dxqwm.cn
http://Gmt8MAGt.dxqwm.cn
http://tKFtftt1.dxqwm.cn
http://u1Wg7Ei6.dxqwm.cn
http://b5n9kerX.dxqwm.cn
http://o1DxHqfo.dxqwm.cn
http://JdgYGMhP.dxqwm.cn
http://xG7wvOHu.dxqwm.cn
http://o70ymBlc.dxqwm.cn
http://eFeyKbz5.dxqwm.cn
http://h3air0mw.dxqwm.cn
http://1S6E5nkN.dxqwm.cn
http://s3kJ9iXo.dxqwm.cn
http://D9PhKBy3.dxqwm.cn
http://2QOrai9S.dxqwm.cn
http://lIyDPFBr.dxqwm.cn
http://9Twrpm4f.dxqwm.cn
http://8NKO7pvx.dxqwm.cn
http://94NAIhj9.dxqwm.cn
http://Gdy4bDuT.dxqwm.cn
http://uS3eYkOb.dxqwm.cn
http://PKnOYR26.dxqwm.cn
http://fQiKPwDg.dxqwm.cn
http://oV2xijXd.dxqwm.cn
http://www.dtcms.com/a/378852.html

相关文章:

  • FPGA入门-无源蜂鸣器驱动
  • 使用Langchain生成本地rag知识库并搭载大模型
  • [第一章] web入门—N1book靶场详细思路讲解
  • uniapp 文件查找失败:main.js
  • 第7篇、Kafka Streams 与 Connect:企业级实时数据处理架构实践指南
  • Linux redis 8.2.1源码编译
  • logging 模块升级版 loguru
  • 【Flask】实现一个前后端一体的项目-脚手架
  • 小说阅读系统Java源码 小说阅读软件开发 小说app小程序
  • 如何在 Debian 12 上安装 MySQL
  • GA-PNN: 基于遗传算法的光子神经网络硬件配置方法(未做完)
  • STM32基础篇--GPIO
  • 无人机遥控器射频模块技术解析
  • Docker 命令核心语法
  • 第五章:Python 数据结构:列表、元组与字典(一)
  • Python快速入门专业版(二十一):if语句基础:单分支、双分支与多分支(判断用户权限案例)
  • 学习笔记:JavaScript(4)——DOM节点
  • 软考中级习题与解答——第四章_软件工程(3)
  • 消息队列-kafka完结
  • SKywalking Agent配置+Oracle监控插件安装指南
  • Skywalking告警配置+简易邮件告警应用配置(保姆级)
  • 【matlab】YALMIP、GLPK安装资源及安装方法
  • modbus学习
  • 创建GLFW窗口,开启OpenGL之路
  • (网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解
  • 如何提升研发文档的检索体验与效率
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(三)
  • R-Zero:大语言模型的自进化革命,突破数据依赖迈向自主智能
  • RL【8】:Value Function Approximation
  • StringJoiner