Vue3 小兔鲜:项目起步

简介: Vue3 小兔鲜:项目起步

Vue3 小兔鲜:项目起步

Date: May 31, 2023


创建项目并整理目录

npm init vue@latest

10766dbad8d25abcfeaec62ab4261ead.png


src目录调整

需要补充创建以下文件:

0585089ae72c31fb685f5205d7741a25.png

git 管理项目

基于create-vue 创建出来的项目默认没有初始化git仓库,需要我们手动初始化


执行命令井完成首次提交


1.git init

2.git add .

3.git commit -m “init”


jsconfig.json配置别名路径

什么是别名路径联想提示

在编写代码的过程中,一旦 输入 @/,VScode会立刻 联想出src下的所有子目录和文件,统一文件路径访问不容易出错

038937c851befa52059ab7899a97ffea.png


如何进行配置

配置别名路径可以在写代码时联想提示路径


1.在项目的根目录下新增 jsconfig.json 文件

2.添加json格式的配置项,如下:

{
  "compilerOptions" : {
    "baseUrl" : "./",
    "paths" : {
      "@/*":["src/*"]
    }
  }
}

理解:当你输入@/ ,Vscode会把src下所有目录都给你联想下来


深入理解:


vite.config.js这个文件的做的是路径转换的工作

9551a73fc9314f246736aa746478203e.png

我们配置的jsconfig.json做的是路径的联想提示工作


elementPlus引入

小兔鲜项目UI组件:


1.通用型组件(ElementPlus)

  1.比如Dialog模糊框

2.业务定制组件(手写)

  1.商品热榜组件


1. 安装elementPlus和自动导入插件

npm install element-plus --save
npm i elementPlusnpm install -D unplugin-vue-components unplugin-auto-import

注意:这里的-D代表仅在开发环境依赖


2. 配置自动按需导入

// 引入插件 (按需导入)
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
  plugins: [
    // 配置插件
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ]
})

注意:plugins是vite插件的专门配置位置


总结以上:


首先,我们安装了element-plus及自动导入插件,如下方所示:

46ae8b8e887e66734d1f79678aac5916.png

然后,我们导入插件所需要的包

f20dcf68a02ef97f54ac243c1a588219.png

最后,在组件中写代码即可,


值得注意的是,这里我们采用的是按需引入的方式,组件的中如果需要element-plus的组件,则会自动导入,无需我们手动配置。


3. 测试组件

在App.vue中导入

<template>
  <el-button type="primary">i am button</el-button>
</template>

效果:

caab97e84cea32c3d6638bb97a253b5b.png


定制elementPlus主题

为什么需要主题定制

小免鲜主题色和elementPlus默认的主题色存在冲突,通过定制主题让elementPlus的主题色和小免鲜项目保持一致

34b0f96f5096c64db6a321000781d3d3.png


具体定制过程:

1. 安装sass

基于vite的项目默认不支持css预处理器,需要开发者单独安装

npm i sass -D

2. 准备定制化的样式文件

这里的写法是sass的写法,从element-plus中获取:

/* 只需要重写你需要的即可 */
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
  $colors: (
    'primary': (
      // 主色
      'base': #27ba9b,
    ),
    'success': (
      // 成功色
      'base': #1dc779,
    ),
    'warning': (
      // 警告色
      'base': #ffb302,
    ),
    'danger': (
      // 危险色
      'base': #e26237,
    ),
    'error': (
      // 错误色
      'base': #cf4444,
    ),
  )
)

之后我们需要在style中新建名叫element的文件夹,并往里面填充index.sass的文件,最后把我们定制的文件存入里面即可。

c2168aade787b75492f6cd05aab79bf2.png

3. 自动导入配置

这里自动导入需要深入到elementPlus的组件中,按照官方的配置文档来


1.配置elementPlus采用sass样式配色系统

2.自动导入定制化文件进行样式覆盖


具体配置修改如下:

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 导入对应包
import ElementPlus from 'unplugin-element-plus/vite'
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [
        // 1. 配置elementPlus采用sass样式配色系统
        ElementPlusResolver({ importStyle: "sass"})
      ],
    }),
    // 按需定制主题配置
    ElementPlus({
      useSource: true,
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  css: {
    preprocessorOptions: {
      scss: {
        // 2. 自动导入定制化样式文件进行样式覆盖
        additionalData: `
          @use "@/styles/element/index.scss" as *;
        `,
      }
    }
  }
})

axios安装并简单封装

1. 安装axios

npm i axios

2. 基础配置

官方文档地址: https://axios-http.com/zh/docs/intro


基础配置通常包括:

c95fce0db78316f00425db012e123b4a.png

1.实例化 - baseURL + timeout


2.拦截器 - 携带token 401拦截等


这一块在utils下的http.js中编写(没有就自己创建)

import axios from 'axios'
// 创建axios实例
const http = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 5000
})
// axios请求拦截器
instance.interceptors.request.use(config => {
  return config
}, e => Promise.reject(e))
// axios响应式拦截器
instance.interceptors.response.use(res => res.data, e => {
  return Promise.reject(e)
})
export default http

3. 封装请求函数并测试

这一块在apis下的testAPI.js下编写(没有就自己编写)

import http from '@/utils/http'
export function getCategoryAPI () {
  return http({
    url: 'home/category/head'
  })
}

最后需要在main.js中补充并测试

import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
// ***添加***
import { getCategory } from './apis/testAPI'
getCategory().then(res => {
  console.log(res);
})
// ***
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.mount('#app')

思考:


如果项目里面不同的业务模块需要的接口基地址不同,该如何来做?


axios.create() 方法可以执行多次,每次执行就会生成一个新的实例,比如:

const http1 = axios.create({ baseURL: 'url1'})
const http2 = axios.create({ baseURL: 'url2'})

路由整体设计

路由设计原则:


设计一级路由:找内容切换的区域,如果是页面整体切换,则为一级路由

804cab5dbad3e6f2e453435d2da2d991.png

理解:如图的路径,path改变,则页面也会随之改变。以上二者为一级路由。


设计二级路由::找内容切换的区域,如果是在一级路由页的内部切换,则为二级路由

fd63d145bca7e729d4ac359efe897d32.png

理解:如上当/后面变成/category时,则页面会变成/下面的一级路由,即二级路由


下面开始配置:


1.配置一级和二级页面

a7554f3389ee01dffe0be0c14efa18b5.png

一级:

<template>
  <div>我是首页</div>
</template>
<template>
  <div>我是登陆页</div>
</template>

二级:

<template>
  我是Category页
</template>
<template>
  我是Home页
</template>

1.eslint配置(可选)

如果我们在配置过程中遇到如下报错,那么我们需要对eslint配置

1ca3f05c579c8ed5e941924bf67f354d.png

我们需要在.eslintrc.cjs中进行补充配置文件,添加如下规则即可:

rules: {
  'vue/multi-word-component-names': 0, // 不再强制要求组件命名
}

1.配置一级和二级路由

配置router下的index.js

// createRouter:创建router实例对象
// createWebHistory:创建history模式的路由
import { createRouter, createWebHistory } from 'vue-router'
import Login from '@/views/Login/index.vue'
import Layout from '@/views/Layout/index.vue'
import Home from '@/views/Home/index.vue'
import Category from '@/views/Category/index.vue'
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  // path和component对应关系的位置
  routes: [
    {
      path: '/',
      component: Layout,
      children: [
        {
          path: '',
          component: Home
        },
        {
          path: 'category',
          component: Category
        }
      ]
    },
    {
      path: '/login',
      component: Login
    }
  ]
})
export default router

总结:


1.路由设计的依据是什么?


内容切换的方式


2.默认二级路由如何进行设置?


path配置项置空


如图所示,效果:二级路由home的path置空,当访问/时,home页也会展示

0b5110fe95a38a7c572018dc17d43217.png


静态资源引入和Error Lens安装

图片资源和样式资源:

资源说明


1.实际工作中的图片资源通常由 UI设计师提供,常见的图片格式有png,svg等都是由UI切图交给前端

2.样式资源通常是指项目初始化的时候进行样式重置,常见的比如开源的 normalize.css 或者手写


资源操作


1.图片资源-把 images 文件夹放到assets 目录下

2.样式资源-把 common.scss 文件放到styles 目录下


静态资源引入

具体操作:


1.图片资源 - 把 images 文件夹放到 assets 目录下

2.样式资源 - 把 common.scss 文件放到 styles 目录下 ## 2. Error Lens插件安装 # scss变量自动导入


补充插件:


error lens:是一个实时提供错误警告信息的VScode插件,方便开发

9f475e5d7fb361dfbaeeedcaf7fdaa3a.png

效果:它会把报错信息放在代码右侧

2b0e947b9fe930bb7163698338771601.png

为什么要自动导入

在项目里一些组件共享的色值会以SCSS变量的方式统一放到一个名为 var.scss 的文件中,正常组件中使用,需要先导入scss文件,再使用内部的变量,比较繁琐,自动导入可以免去手动导入的步骤,直接使用内部的变量


自动导入配置:


1.新增一个 var.scss 文件,存入色值变量


2.通过 vite.config.js 配置自动导入文件


在styles中的element配置var.scss

$xtxColor: #27ba9b;
$helpColor: #e26237;
$sucColor: #1dc779;
$warnColor: #ffb302;
$priceColor: #cf4444;

在vite.config.js中

css: {
    preprocessorOptions: {
      scss: {
        // 自动导入scss文件
        additionalData: `
          @use "@/styles/element/index.scss" as *;
          @use "@/styles/var.scss" as *;
        `,
      }
    }
}
相关文章
|
2天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
103 64
|
28天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
14天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
2天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
|
27天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
24天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
50 7
|
25天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
41 3
|
24天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
40 1
|
24天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
44 1
|
26天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
下一篇
无影云桌面