Vue2工程化

news2024/11/29 8:52:35

本节目标

  • 工程化开发
  • 项目运行流程
  • 组件化
  • 组件注册
  • 自定义创建项目

工程化开发

基于构建工具的环境开发Vue

Webpack的缺点

  1. webpack的配置并不简单
  2. 基础的配置雷同
  3. 各公司缺乏统一标准

Vue CLI

  1. Vue CLI是Vue官方提供的一个全局命令工具
  2. 帮助我们快速创建标准化的开发环境( 集成了webpack配置 )
  3. 开箱即用, 零配置
  4. 内置babel等工具
  5. 全局安装: yarn global add @vue/cli 或 npm i @vue/cli -g
  6. 查看版本: vue -version
  7. 创建项目: vue create project-name(项目名-不能用中文)
  8. 创建模式: Default([Vue 2] babel, eslint) (使用默认的模式创建项目) (后面学习自定义创建)
  9. 启动项目: yarn serve 或 npm run serve

目录结构

核心文件说明

<!DOCTYPE html>
<html lang="">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <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>

  <!--  Vue所管理的容器:  将来渲染的所有内容都会在这个容器中 -->
  <div id="app">
    <!-- 在工程化项目中, 这里不再直接编写模版语法, 而是通过App.vue 提供结构渲染 -->
  </div>

  <!-- built files will be auto injected -->
</body>

</html>
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
// 该文件的核心作用: 
// 导入App.vue根组件, 创建Vue实例, 通过Vue实例提供的方法, 把根组件渲染到index.html中
import Vue from 'vue'
import App from './App.vue'

// 提示当前处于什么环境(生产环境/开发环境)
Vue.config.productionTip = false

// 官方写法
// new Vue({
//   render: h => h(App),
// }).$mount('#app')

// 创建Vue实例, 提供render方法, 把根组件渲染到index.html中
new Vue({
  // 指定容器,和$mount('#app')作用一致
  el: '#app',
  // 完整写法, 基于App.vue创建结构渲染到index.html中
  render: (createElement) => {
    //基于App创建元素结构
    return createElement(App)
  },
})

自定义创建项目

基于Vue Cli自定义创建项目架子

  1. 开始创建项目

  1. 选择创建模式 (选择自定义创建)

  1. 选择集成模块

  1. 选择路由模式 (选择 n, 使用hash模式)

  1. 选择CSS预处理器 (选择Less)

  1. 选择代码校验风格 (选择无分号风格, 目前主流)

  1. 选择代码校验时机 (保存时校验)

  1. 选择配置文件位置 (单独存放配置文件)

  1. 是否保存创建流程 (选择 n, 不保存)

  1. 按空格键选中或取消选项. 按上下箭头切换选项

ESlint代码规范

一套写代码的约定规则, 正规的团队, 需要统一的编码风格, 提高团队开发效率

  1. Standard Style规范说明: JavaScript Standard Style
  2. 如果代码不符合 standard的要求, ESlint就会提示你

手动修改错误

  1. 学会查看ESLint的报错信息

  1. 有些信息不够明确, 查找详细的规范信息: 规则参考 - ESLint - 插件化的 JavaScript 代码检查工具
  2. 列举一些易懂的规则

自动修改错误

  1. 基于 ESLint 插件可以提供错误高亮, 通过配置, 可以在自动帮我们修复错误
  2. 详细的配置见: 前端环境 -> 7,自动修复错误

项目运行流程

启动命令执行后, 先执行入口文件, 文件文件会导入根组件, 然后创建Vue实例, 通过实例的render()方法把根组件渲染到模版文件的容器中

组件化

一个页面可以拆分成一个个组件, 每个组件有着自己独立的结构, 样式, 行为

好处: 便于维护, 利于复用, 提高开发效率

分类: 普通组件, 根组件

根组件: 整个应用的最上层的组件, 包裹所有普通小组件

组件化

1>组件构成

有三部分组成: template(结构) script(逻辑) style(样式)

结构

<template>
  <div>
    <!-- vue2中有且只能有一个根元素 -->
    ... ...
 </div>
</template>

样式

<style>
  /*
     如果需要less支持,
     1安装: yarn add less less-loader
     2开启: lang="less"
  */
</style>

样式隔离

  • 组件中的样式默认是全局样式, 影响所有组件, 容易造成组件样式冲突
  • 添加scoped属性, 开启样式隔离, 让组件样式只影响自己 (局部样式)

scoped原理

  • 为当前组件的所有标签添加一个自定义属性, 格式: data-v-hash值
  • css选择器都会被自动添加 [data-v-hash值] 的属性选择器
  • 最终结果: 必须是当前组件的元素, 才会有对应的自定义属性, 样式才会生效

样式覆盖

  1. 问题: 由于组件存在样式隔离, 当使用第三方组件库,并且有修改第三方组件默认样式的需求时, 直接修改无效
  2. 解决: 需要用 /deep/ 深度选择器 的方式修改样式
  3. 使用: 在选择器之前加上深度选择器就行了, 达到样式穿透的效果

行为

<script>
// 导出配置对象 
export default {
  name: 'App',
  data(){
    return {}
  }
}
</script>

data配置项

  • 在组件中, data配置项必须是一个函数
  • 保证每个组件实例. 维护独立的一份数据对象
  • 每次创建新的组件实例. 都会执行一次data函数, 得到一个新对象

2>组件注册

局部注册

只能在注册的组件内使用

  1. 创建组件, 使用大驼峰命名法(HmHeader)
  2. 引入组件, import 组件对象 from 'vue文件路径'
  3. 注册组件, 在 components 配置项中注册组件
  4. 使用组件, <组件名></组件名>

全局注册

所有的组件内都能使用

  1. 创建组件, 使用大驼峰命名法(HmButton)
  2. 在main.js中引入组件,
  3. 注册组件, Vue.component('组件名', 组件对象)
  4. 一次只能注册一个组件
  5. 使用组件, <组件名></组件名>
  6. 技巧: 一般都用局部注册, 发现组件多处使用, 再抽离到全局

3>组件拆分
  1. 分析页面, 按模块拆分组件, 搭架子
  2. 根据设计图, 编写html结构css样式
  3. 拆分封装通用小组件

4>动态组件

动态组件: 根据组件名称切换组件

// 定义动态组件
<component :is="comName"></component>

// 渲染Left组件, 改变属性值即切换组件
data() {
    return {
      comName: "Left",
    };
},

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TB作品】MSP430F5529,单片机,电子秒表,秒表

硬件 MSP430F5529开发板7针0.96寸OLED /* OLED引脚分配 绿色板子DO(SCLK)------P4.3D1(DATA)------P4.0RES-----------P3.7DC------------P8.2CS------------P8.1 */ 程序功能 该程序是一个用C语言编写的&#xff0c;用于msp430f5529微控制器上的简单电子秒表应用。它使用…

2024年如何通过完善的工程化,从0到1手把手建立个人 react 组件库

本文聚焦于快速创建并部署个人的组件库&#xff0c;方便平时开发中将通用的组件抽出&#xff0c;也可用于简历上展示个人的组件成果~ 组件库体验地址&#xff1a;components-library 关于以上内容&#xff0c;你是否好奇如何实现的&#xff0c;对于大多数项目&#xff0c;诸如…

USB Type-C 和 USB供电数据和电源角色

USB Type-C 连接器生态系统随着现代平台和设备需求的变化而不断发展。 USB Type-C 连接器生态系统可满足现代平台和设备不断变化的需求&#xff0c;并且符合更小、更薄且更轻便的外形设计趋势。此外&#xff0c;针对 Type-C 连接器修改 USB PD 有助于满足高耗电应用的需求。 …

容声冰箱正式发布主动除菌净味白皮书,守护家人饮食健康

近日&#xff0c;由中国家用电器研究院指导、全国家用电器工业信息中心和容声冰箱联合编制的《冰箱主动除菌净味技术发展白皮书》&#xff08;下称《白皮书》&#xff09;正式发布。 《白皮书》指出&#xff0c;容声将IDP主动除菌技术应用到冰箱冷冻、冷藏区域&#xff0c;实现…

百华鞋业祝莘莘学子旗开得胜,一举夺魁

在知识的海洋中&#xff0c; 有一群人以笔为剑&#xff0c; 在漫长的岁月里不断磨砺&#xff0c; 只为迎接那场人生的重要战役——高考。 高考&#xff0c; 是学子们十几年寒窗苦读的见证&#xff0c; 是他们用奋斗书写青春考卷的舞台。 在这个舞台上&#xff0c; 他们将…

硕思闪客精灵(shankejingling)软件最新版下载及详细安装教程

闪客精灵&#xff08;Sothink SWF Decompiler&#xff09;是一款先进的SWF反编译软件&#xff0c;它不但能捕捉、反编译、查看和提取Shock Wave Flash影片&#xff08;.swf和.exe格式文件&#xff09;&#xff0c;而且可以将SWF格式文件转化为FLA格式文件。它能反编译Flash的所…

YOLOv10开源,高效轻量实时端到端目标检测新标准,速度提升46%

前言 实时目标检测在自动驾驶、机器人导航、物体追踪等领域应用广泛&#xff0c;近年来&#xff0c;YOLO 系列模型凭借其高效的性能和实时性&#xff0c;成为了该领域的主流方法。但传统的 YOLO 模型通常采用非极大值抑制 (NMS) 进行后处理&#xff0c;这会增加推理延迟&#…

k8s挂载配置文件(通过ConfigMap方式)

一、ConfigMap简介 K8s中的ConfigMap是一种用于存储配置数据的API对象&#xff0c;属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离&#xff0c;以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组…

Selenium with Python Behave(BDD)

一、简介 Python语言的行为驱动开发&#xff0c;Behavior-driven development&#xff0c;简称BDD. "Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or bu…

Java锁的四种状态(无锁、偏向级锁、轻量级锁、重量级锁)

介绍 首先&#xff0c;我们需要明确一点&#xff1a;偏向级锁、轻量级锁、重量级锁只针对synchronized 锁的状态总共有四种&#xff0c;级别由低到高依次为&#xff1a;无锁、偏向锁、轻量级锁、重量级锁。 这四种锁状态分别代表什么&#xff0c;为什么会有锁升级&#xff…

项目管理--领导者vs管理者

项目管理领导者和管理者&#xff0c;虽然这两个角色在项目管理中都非常重要&#xff0c;但它们之间还是存在一些区别。首先&#xff0c;让我们来了解一下这两个角色的定义和职责。项目管理领导者是指那些能够激励团队成员&#xff0c;带领他们朝着共同目标前进的人。他们具备良…

为什么需要在微服务中使用链路追踪?Spring Cloud 可以选择哪些微服务链路追踪方案?

引言&#xff1a;在当今的软件开发领域中&#xff0c;微服务架构已经成为了构建大型应用程序的主流方式之一。随着微服务数量的增加和服务之间复杂性的提高&#xff0c;对于了解和监控服务之间的调用关系变得越来越重要。而链路追踪技术的出现&#xff0c;为解决这一难题提供了…

高效文件传输攻略:利用局域网共享实现极速数据同步

最近&#xff0c;我换了一台新电脑&#xff0c;面对两个电脑之间文件备份和传输的问题&#xff0c;感到十分头疼。经过多方了解&#xff0c;我发现可以在原电脑上设置共享文件&#xff0c;然后接收方从共享文件中接受即可&#xff0c;这样可以将局域网的带宽拉满&#xff0c;比…

【吊打面试官系列】MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

大家好&#xff0c;我是锋哥。今天分享关于 【MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xf…

项目3:从0开始的RPC框架(扩展版)

一. 全局配置加载 1. 需求分析 通常情况下&#xff0c;在RPC框架运行的会涉及到多种配置信息&#xff0c;比如注册中心的地址、序列化方式、网络服务端接口号等。 在简易版框架中&#xff0c;硬编码了这些配置&#xff0c;也就是都写死了&#xff0c;在真实的应用环境中是不…

Java——数组排序

一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类&#xff1a;内部排序和外部排序。 3、内部排序和外部排序 1&#xff09;内部排序 内部排序是指数据在内存中进行排序&#xff0c;适用于数据量较小的情况…

开源VS闭源:大模型发展路径之争,你站哪一派?

文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…

问题:下列可以作为机组投运凝结水精处理系统的指标为()。 #学习方法#经验分享#微信

问题&#xff1a;下列可以作为机组投运凝结水精处理系统的指标为&#xff08;&#xff09;。 A.启动分离器出水含铁量小于1000ug/L B.启动分离器出水含铁量大于1000ug/L C.启动分离器出水含铁量等于1000ug/L D.以上都不是 参考答案如图所示

最佳实践的实践 - API 不应将 HTTP 重定向到 HTTPS

原文&#xff1a;jviide - 2024.05.23 TL;DR: 与其将 API 调用从 HTTP 重定向到 HTTPS&#xff0c;不如让失败显而易见。要么完全禁用 HTTP 接口&#xff0c;要么返回明确的 HTTP 错误响应&#xff0c;并撤销通过未加密连接发送的 API 密钥。遗憾的是&#xff0c;许多知名的 A…

小白的学习资料:Spark MLlib 机器学习详细教程

Spark MLlib 机器学习详细教程 Apache Spark 是一个强大的开源分布式计算框架&#xff0c;广泛用于大数据处理和分析。Spark 提供了丰富的库&#xff0c;其中 MLlib 是其机器学习库&#xff0c;专为大规模数据处理设计。本教程将详细介绍 Spark MLlib&#xff0c;包括其主要功…