02 使用Vite创建Vue3项目并开发第一个组件

概述

A Vue project is structured similarly to a lot of modern node-based apps and contains the following:

  • A package.json file
  • A node_modules folder in the root of your project
  • Various other configuration files are usually contained at the root level, such as vite.config.js and .eslintrc.js, since they will generally have an effect across your whole project.

Vue 项目的结构与许多基于节点的现代应用程序类似,包含以下内容:

  • package.json 文件

  • 项目根目录下的 node_modules 文件夹

  • 其他各种配置文件通常包含在根级别,如 vite.config.js 和 .eslintrc.js,因为它们通常会对整个项目产生影响。

By default, there is an index.html file at the root level that serves as a placeholder for loading the Vue application. You can modify this file to include header and footer scripts, such as Google Fonts or third-party JavaScript libraries that are not included as a part of your bundle.

默认情况下,根层级有一个 index.html 文件,作为加载 Vue 应用程序的占位符。您可以修改该文件以包含页眉和页脚脚本,如 Google 字体或未包含在捆绑包中的第三方 JavaScript 库。

The Vue project structure follows a pattern where you manage most of your source code within the /src directory. You can subdivide your Vue files into various folders, for example, using a components folder to store reusable Vue components. By default, Vite will create assets and components folders to code-split the default files. For beginners, it is good to follow this pattern until you get more comfortable。

Vue 项目结构遵循一种模式,即在 /src 目录中管理大部分源代码。您可以将 Vue 文件细分到不同的文件夹中,例如,使用组件文件夹来存储可重复使用的 Vue 组件。默认情况下,Vite 会创建 assets 和 components 文件夹,对默认文件进行代码分割。对于初学者来说,最好遵循这种模式,直到熟悉为止。

The public folder is a special directory containing files that need to be transferred directly to the output location.

公共文件夹是一个特殊目录,其中包含需要直接传输到输出位置的文件。

At this point, you should be somewhat familiar with how a Vue project structure looks. Next, we discuss Vue’s unique pattern – the SFC architecture.

至此,您应该对 Vue 项目的结构有了一定的了解。接下来,我们将讨论 Vue 的独特模式--SFC 架构。

创建Vite项目

这里版本推荐使用nodejs 20,可以使用nvm管理nodejs的版本:

nvm use 20

使用以下命令创建一个vue项目:

npm install -g yarn
yarn create vite c02_vite_demo --template vue

接着通过以下命令启动项目:

cd c02_vite_demo
yarn
yarn dev

SFC架构

Components are the building blocks of most modern frameworks. In general, splitting your code into component-specific chunks ensures code readability and facilitates the Don’t Repeat Yourself (DRY) principle. Vue’s SFC pattern follows this approach closely.

组件是大多数现代框架的构件。一般来说,将代码拆分成特定的组件块可确保代码的可读性,并有助于遵循 "不要重复"(DRY)原则。Vue 的 SFC 模式紧跟这种方法。

The SFC architecture centralizes the responsibility of both appearance and behavior into a single file, thus simplifying the architecture of your project.

SFC 架构将外观和行为的责任集中到一个文件中,从而简化了项目的架构。

You now can refer to your HTML, CSS, and JavaScript logic without switching files. Your default .vue file structure will be as follows:

现在,您可以在不切换文件的情况下引用 HTML、CSS 和 JavaScript 逻辑。您的默认 .vue 文件结构如下:

<script setup>
</script>

<template>
</template>

<style scoped>
</style>

A general good practice is to ensure your components file doesn’t contain more than 500 lines of code. If you encounter this situation, it’s recommended to split them into smaller reusable components. For example, in the header of your application, you may have a logo element that is reused on other pages. You would create a component such as logo.vue:

一般的良好做法是确保组件文件中的代码不超过 500 行。如果遇到这种情况,建议将其拆分成更小的可重复使用的组件。例如,在应用程序的页眉中,可能会有一个在其他页面中重复使用的徽标元素。您可以创建一个组件,如 logo.vue:

<template>
    <img src="myLogo.png" />
</template>

In header.vue, you import the logo component into the script section and then include it as a nested component of the header component. You can achieve this by declaring it as a property of the components field:

在 header.vue 中,您需要将徽标组件导入脚本部分,然后将其作为嵌套组件包含在页眉组件中。为此,您可以将其声明为组件字段的一个属性:

<script>
    import logo from 'components/logo.vue'
    export default {
        components: {
            logo
        }
    }
</script>

In the template section, you can use the logo as a normal HTML element, as shown here:

在模板部分,您可以将徽标作为普通 HTML 元素使用,如图所示:

<template>
    <header>
        <a href="mywebsite.com">
            <logo />
        </a>
    </header>
</template>

The output will be a header with the logo image rendered – and you can reuse the logo component in any other component when needed.

输出结果将是渲染了徽标图像的页眉,您可以在需要时在任何其他组件中重复使用徽标组件。

Very soon, you will have lots of these semantically structured files, which use small chunks of a reusable syntax that your team can implement across various application areas.

很快,您就会拥有大量这些语义结构文件,它们使用小块的可重用语法,您的团队可以在不同的应用领域实施这些语法。

In the next exercise, you will practice creating your first Vue component and displaying it in another component.

在下一个练习中,您将练习创建第一个 Vue 组件并将其显示在另一个组件中。

练习:构建你的第一个组件

Create another file in the components folder called Exercise1-01.vue and repeat the same step for scaffolding the Vue component:

在组件文件夹中创建另一个名为 Exercise1-01.vue 的文件,并重复同样的步骤为 Vue 组件搭建脚手架:

<template>
</template>
<script>
export default {
}
</script>
<style>
</style>

Within our Exercise1-01.vue component, compose a set of <div> tags, with an <h1> element and a heading inside the <template> tags:

在我们的 Exercise1-01.vue 组件中,编写一组 <div> 标记,在 <template> 标记内包含一个 <h1> 元素和一个标题:

<template>
    <div>
        <h1>My first component!</h1>
    </div>
</template>

Inside the <style> block, add some styling as follows:

<style> 块中,添加一些样式如下:

<style>
h1 {
    font-family: 'Avenir', Helvetica, Arial,
        sans-serif;
    text-align: center;
    color: #2c3e50;
    margin-top: 60px;
}
</style>

Import our component into App.vue by using the ES6 import method and defining the component inside the components object in the <script> block. We can now reference this component inside the HTML by using its name in camelCase or kebab-case (both will work):

使用 ES6 导入方法将组件导入 App.vue,并在 <script> 块的组件对象中定义组件。现在,我们可以在 HTML 中以 camelCase 或 kebab-case 引用该组件的名称(两者均可):

<template>
  <Exercise />
</template>
<script>
import Exercise from './components/Exercise1-01.vue'
export default {
  components: {
    Exercise,
  }
}
</script>

启动服务,浏览器访问:http://localhost:5173/

In this exercise, we saw how to structure Vue components using template tags, and scaffold basic Vue components using Vetur. We also created a new Vue component and reuse it in App.vue using ES6 syntax and property field components.

在本练习中,我们了解了如何使用模板标签构建 Vue 组件,以及如何使用 Vetur 构建基本的 Vue 组件。我们还创建了一个新的 Vue 组件,并在 App.vue 中使用 ES6 语法和属性字段组件对其进行了重用。

In the next section, we will gain an understanding of how to define the local state data of a component using data properties.

在下一节中,我们将了解如何使用数据属性定义组件的本地状态数据。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容