一、Vue与VueComponent原型关系解析

1. 原型链关系图解

在Vue中,组件实例(VueComponent)与Vue实例之间存在特殊的原型链关系:

VueComponent.prototype.__proto__ === Vue.prototype

这种设计使得所有组件都能访问Vue原型上定义的方法和属性。

2. 原理验证示例

// 在Vue原型上添加方法
Vue.prototype.$sayHello = function() {console.log('Hello from Vue prototype!')
}// 创建组件
const Company = Vue.extend({created() {this.$sayHello() // 可以调用Vue原型上的方法}
})// 使用组件
new Vue({el: '#app',components: { Company },template: '<Company/>'
})

关键点

  • 组件实例可以访问Vue原型上的属性和方法

  • 这种设计实现了Vue功能的扩展性

  • 这也是为什么能在组件中使用this.$routerthis.$store等全局属性的原因

二、单文件组件

1. 文件结构与命名规范

推荐的单文件组件结构:

MyComponent.vue
├── <template>    // 组件模板
├── <script>      // 组件逻辑
└── <style>       // 组件样式

命名建议

  • 文件名使用PascalCase(首字母大写)

  • 与组件名保持一致

  • 多单词命名使用大驼峰

  • 避免与HTML元素冲突

2. 组件导出方式对比

2.1 分别暴露
<script>
export const Company = {data() {return { name: "Vue Inc." }}
}
</script>

使用方式:

import { Company } from './Company.vue'
2.2 统一暴露
<script>
const Company = {data() {return { name: "Vue Inc." }}
}
export { Company }
</script>
2.3 默认暴露(推荐)
<script>
export default {name: 'Company',data() {return { name: "Vue Inc." }}
}
</script>

使用方式:

import Company from './Company.vue'

最佳实践

  • 优先使用默认暴露

  • 始终指定name选项

  • 保持组件名称与文件名一致

三、Vue脚手架工程化

1.1 配置国内镜像
// 淘宝镜像
npm config set registry https://registry.npm.taobao.org
// 阿里镜像
npm config set registry https://registry.npmmirror.com/
1.2 安装Vue CLI
npm install -g @vue/cli
1.3 创建项目
vue create my-project
cd my-project
npm run serve

2. 项目结构

my-project
├── public/            # 静态资源
│   ├── index.html     # 主入口HTML
│   └── favicon.ico   # 网站图标
├── src/
│   ├── assets/        # 静态资源
│   ├── components/    # 组件目录
│   ├── App.vue        # 根组件
│   └── main.js        # 应用入口
├── .gitignore         # Git忽略配置
├── babel.config.js    # Babel配置
└── package.json       # 项目配置

3. 核心文件解析

3.1 public/index.html
<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><!-- 针对IE浏览器的一个特殊配置,让IE浏览器以最高的渲染级别渲染页面 >=IE8 --><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- 开启移动端的理想视口 --><meta name="viewport" content="width=device-width,initial-scale=1.0"><!-- 配置页签图表,BASE_URL指的public路径 --><link rel="icon" href="<%= BASE_URL %>favicon.ico"><!-- 配置网页标题 从package.json中获取标题--><title><%= htmlWebpackPlugin.options.title %></title></head><body><!-- 当浏览器不支持js,以下代码会出现在页面上 --><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><!-- 容器 --><div id="app"></div><!-- built files will be auto injected --></body>
</html>
3.2 src/main.js
import Vue from 'vue'
import App from './App.vue'Vue.config.productionTip = falsenew Vue({render: h => h(App)
}).$mount('#app')
3.3 src/App.vue
<template><div id="app"><Company/></div>
</template><script>
import Company from './components/Company.vue'export default {name: 'App',components: { Company }
}
</script><style>
/* 全局样式 */
</style>

四、Vue完整版与运行时版本区别

1. 核心差异对比

特性vue.js (完整版)vue.runtime.js (运行时版)
模板解析器包含不包含
体积较大较小(约轻30%)
使用方式支持template选项必须使用render函数
适用场景直接HTML引用构建工具配合使用

2. 使用示例对比

完整版使用方式
new Vue({el: '#app',template: '<div>{{ message }}</div>',data: {message: 'Hello Vue!'}
})
运行时版使用方式
new Vue({el: '#app',render(h) {return h('div', this.message)},data: {message: 'Hello Vue!'}
})

3. 脚手架中的配置

在vue.config.js中可以配置使用的版本:

module.exports = {configureWebpack: {resolve: {alias: {'vue$': 'vue/dist/vue.esm.js' // 使用完整版}}}
}

五、高级配置与优化建议

1. 自定义脚手架配置

创建vue.config.js进行个性化配置:

module.exports = {// 基本路径publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/',// 输出目录outputDir: 'dist',// 静态资源目录assetsDir: 'static',// 是否启用eslintlintOnSave: process.env.NODE_ENV !== 'production',// 生产环境sourceMapproductionSourceMap: false,// 开发服务器配置devServer: {port: 8080,proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true}}}
}

2. 性能优化建议

  1. 代码分割

const Company = () => import('./components/Company.vue')

  1. 第三方库CDN引入: 

module.exports = {configureWebpack: {externals: {vue: 'Vue','vue-router': 'VueRouter'}}
}

Gzip压缩

npm install compression-webpack-plugin --save-dev

图片优化

module.exports = {chainWebpack: config => {config.module.rule('images').use('image-webpack-loader').loader('image-webpack-loader').options({ bypassOnDebug: true })}
}

六、总结与最佳实践

1. 组件开发黄金法则

  1. 单一职责原则:每个组件只做一件事

  2. 明确接口:通过props和events定义清晰的组件API

  3. 可复用设计:考虑组件的通用性

  4. 命名一致性:保持文件名、组件名和注册名一致

2. 工程化实践建议

  1. 项目结构

src/
├── components/      # 基础组件
├── views/           # 路由组件
├── store/           # Vuex相关
├── router/          # 路由配置
├── api/             # 接口封装
└── utils/           # 工具函数
  1. 代码规范

    • 使用ESLint + Prettier统一代码风格

    • 添加JSDoc注释

    • 编写组件文档(可使用Storybook)

  2. 测试策略

    • 单元测试:Jest + Vue Test Utils

    • E2E测试:Cypress

  3. 学习路径推荐

通过本文的系统学习,您已经掌握了Vue单文件组件和脚手架工程化开发的核心知识。接下来可以通过实际项目实践来巩固这些概念,逐步提升Vue开发技能水平。

  1. 掌握单文件组件开发

  2. 熟悉Vue CLI工程化配置

  3. 学习Vue Router和Vuex

  4. 了解服务端渲染(Nuxt.js)

  5. 探索Vue 3新特性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89112.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89112.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89112.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构设计之计算高性能——单体服务器高性能

架构设计之计算高性能——单体服务器高性能 高性能是每个程序员共同的追求&#xff0c;无论是开发系统&#xff0c;还是仅仅只是写一段脚本&#xff0c;都希望能够达到高性能的效果&#xff0c;而高性能又是软件系统设计中最复杂的一步。无论是开发千万级并发的电商系统&#…

Unity灯光面板环境设置

在Unity中&#xff0c;环境设置&#xff08;Environment Lighting&#xff09; 是灯光面板&#xff08;Lighting Window&#xff09;的核心功能之一&#xff0c;用于控制场景的全局光照效果&#xff0c;包括天空盒、环境光、反射和雾效等。这些设置直接影响场景的整体氛围和真实…

MySQL语句优化案例

1.案例in查询条件很慢其中in中共115个select id,detail_id,request,response,utime,ctime from response_detaill where detaill_id in (26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 2637197…

能行为监测算法:低成本下的高效管理

AI监控智慧公司管理&#xff1a;降本增效的实践与突破一、背景&#xff1a;经济压力下的管理转型需求在经济下行周期&#xff0c;企业面临人力成本攀升、管理效率低下、安全风险频发等多重挑战。传统监控依赖人工巡检&#xff0c;存在响应滞后、误判率高、数据孤岛等问题&#…

当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式

当前&#xff08;2024-07-14&#xff09;视频插帧&#xff08;VFI&#xff09;方向的 SOTA 基本被三篇顶会工作占据&#xff0c;按“精度-速度-感知质量”三条线总结如下&#xff0c;供你快速定位最新范式。感知质量最佳&#xff1a;CVPR 2024 ‑ PerVFI • 关键词&#xff1a;…

开源 python 应用 开发(七)数据可视化

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

基于深度学习的情感分析模型:从文本数据到模型部署

前言 情感分析&#xff08;Sentiment Analysis&#xff09;是自然语言处理&#xff08;NLP&#xff09;领域中的一个重要应用&#xff0c;它通过分析文本数据来判断文本的情感倾向&#xff0c;例如正面、负面或中性。随着社交媒体的兴起&#xff0c;情感分析在市场调研、品牌管…

使用python 实现一个http server

下面是一个使用 Python 内置库 http.server 的简单 HTTP 服务器实现。不需要安装任何第三方库&#xff0c;非常适合做演示或开发测试用。 from http.server import HTTPServer, BaseHTTPRequestHandlerclass SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self…

Redis技术笔记-主从复制、哨兵与持久化实战指南

目录 前言 一、Redis主从复制 &#xff08;一&#xff09;Redis主从复制介绍 &#xff08;二&#xff09;基本环境准备 &#xff08;三&#xff09;工作原理 &#xff08;四&#xff09;结构模式 &#xff08;五&#xff09;一主一从&#xff08;无密码&#xff09; 配置…

sundog公司的SilverLining SDK库实现3d动态云层和下雨、下雨、雨夹雪效果

OSG系列文章目录 文章目录OSG系列文章目录前言一、3d动态云与下雨、下雪效果不能同时出现二、3d动态云与下雨、下雪效果不能同时出现的原因三、解决办法&#xff1a;前言 先看下效果&#xff1a;下雨 效果&#xff1a;下雪 效果&#xff1a;雨夹雪 &#x1f324;️ Sundo…

Python:简易的 TCP 服务端与客户端示例

下面是一个完整的 TCP 服务端与客户端示例&#xff0c;适用于 Python 3&#xff0c;使用 socket 模块&#xff0c;并正确处理了中文传输与异常情况&#xff0c;支持基本的多轮通信。TCP 服务端&#xff08;server_tcp.py&#xff09;import socket HOST 127.0.0.1 # 监听本地…

文心一言 4.5 开源深度剖析:中文霸主登场,开源引擎重塑大模型生态

> 百度用一场彻底的开源风暴,宣告中文大模型进入性能与普惠并重的新纪元——这里没有技术黑箱,只有开发者手中跃动的创新火花。 2025年,当全球大模型竞赛进入深水区,百度文心一言4.5的开源如同一颗重磅炸弹,彻底打破了“闭源即领先”的固有认知。这一次,中国团队不…

解决“Windows 无法启动服务”问题指南

错误1067&#xff1a;进程意外终止一、重启计算机有时系统出现临时性的服务故障&#xff0c;重启计算机就可以有效解决问题。需要注意的是&#xff0c;在重启之前&#xff0c;需要保存好所有未保存的工作&#xff0c;以免数据丢失。重启完成后&#xff0c;再次尝试启动相关服务…

银河麒麟(Kylin) - V10 GFB高级服务器操作系统ARM64部署昇腾910b训练机以及Docker安装

银河麒麟(Kylin) - V10 GFB高级服务器操作系统ARM64部署昇腾910b训练机以及Docker安装 原因 项目需要使用Deepseek-r1-distill-qwen-32b来做训练&#xff0c;在此记录 测试环境 服务器配置 型号&#xff1a;G5680V2 CPU&#xff1a;CPU 4Kunpeng 920-5250 NPU&#xff1a;NP…

消息中间件(Kafka VS RocketMQ)

目录 一、概要介绍 二、架构与原理 三、消费模式 1、Kafka—纯拉模式 2、RocketMQ—拉模式 3、RocketMQ—推模式 4、模式对比 四、特殊消息 1、顺序消息 2、消息过滤 3、延迟消息 4、事务消息 5、广播消息 五、高吞吐 六、高可用 七、高可靠 一、概要介绍 Apa…

MyBatis级联查询深度解析:一对多关联实战指南

MyBatis级联查询深度解析&#xff1a;一对多关联实战指南在实际企业级开发中&#xff0c;单表操作仅占20%的场景&#xff0c;而80%的业务需求涉及多表关联查询。本文将以一对多关系为例&#xff0c;深入剖析MyBatis级联查询的实现原理与最佳实践&#xff0c;助你掌握高效的数据…

搜索框的显示与隐藏(展开与收起)

效果如下直接上代码v-if"showAll || 0 < 3" 的意思是&#xff1a;如果 showAll 为 true&#xff0c;或者 0 小于 3&#xff0c;这个表单项就会显示。<el-form :inline"true" class"demo-form-inline" size"default" label-width…

01 启动流程实例

前言本文基于 Activiti 7.0.0.GA 源码&#xff0c;研究 Activiti 如何启动一个流程实例。审批流程图如下图&#xff0c;在此流程图中&#xff0c;存在两个UserTask节点&#xff0c;第一个节点是主管审批&#xff0c;第二个节点是产品经理审批&#xff0c;两个节点中间有一个排他…

LeetCode--47.全排列 II

解题思路&#xff1a;1.获取信息&#xff1a;给定一个可包含重复数字的序列&#xff0c;按任意顺序返回所有不重复的全排列提示信息&#xff1a;1 < nums.length < 8-10 < nums[i] < 102.分析题目&#xff1a;相较于46题&#xff0c;它多限制了一个条件&#xff0c…

vue3 服务端渲染时请求接口没有等到数据,但是客户端渲染是请求接口又可以得到数据

原因是: 服务端请求 后端接收到 请求 ‘Content-Type’: ‘application/x-www-form-urlencoded; charsetUTF-8’ 直接返回错误的code 200000 增加 data: {} 服务端请求 后端接收到 请求 ‘Content-Type’: ‘application/json; charsetUTF-8’ 服务端请求就可以得到数据 expo…