vite+vue3+ts从0到1搭建企业级项目(2)

简介: vite+vue3+ts从0到1搭建企业级项目

vite+vue3+ts从0到1搭建企业级项目(1)https://developer.aliyun.com/article/1540136

3. 代码质量风格的统一

集成 eslint

eslint是可组装的javascript和JSX检查工具。就是说它可以帮我们检查我们的javascript代码,来保证代码的一致性和避免错误。当然,通过其他的解释器,它也能帮我们检查typescript。可组装的意思是eslint是插件化的,每一个规则都是插件,我们可以根据自己的需要去组装出不同的规则集合满足自己项目的需求。官网地址

  • 安装
yarn add eslint eslint-plugin-vue --save-dev
  • 由于 ESLint 默认使用 Espree进行语法解析,无法识别 TypeScript 的一些语法,故我们需要安装 @typescript-eslint/parser 替代掉默认的解析器
yarn add @typescript-eslint/parser --save-dev
  • 安装对应的插件 @typescript-eslint/eslint-plugin 它作为 eslint 默认规则的补充,提供了一些额外的适用于 ts 语法的规则。
yarn add @typescript-eslint/eslint-plugin --save-dev
  • 创建配置文件: .eslintrc.js
// 这是一个 CommonJS 模块,可以导入到其他的 JavaScript 文件中使用
module.exports = {
  // 指定解析器为 'vue-eslint-parser',这是一个专门为 Vue.js 设计的 ESLint 解析器
  parser: 'vue-eslint-parser',
  // 定义解析器的选项
  parserOptions: {
    // 指定 'vue-eslint-parser' 的解析器为 '@typescript-eslint/parser',这是一个为 TypeScript 设计的 ESLint 解析器
    parser: '@typescript-eslint/parser',
    // 设置 ECMAScript 的版本为 2020
    ecmaVersion: 2020,
    // 设置源代码的类型为 'module',对应 ECMAScript 6 中的模块
    sourceType: 'module',
    // 开启 JSX 的解析功能
    ecmaFeatures: {
      jsx: true
    }
  },
  // 扩展或继承一些现有的配置
  extends: [
    // 使用 Vue.js 3 推荐的 ESLint 规则
    'plugin:vue/vue3-recommended',
    // 使用 TypeScript 推荐的 ESLint 规则
    'plugin:@typescript-eslint/recommended',
  ],
  // 自定义或覆盖一些规则
  rules: {
    // 在这里添加或覆盖规则,例如:
    // 'no-console': 'off' // 禁用 'no-console' 规则
  }
};
  • 创建忽略文件:.eslintignore
node_modules/
dist/
index.html
  • 命令行式运行:修改package.json
{
    ...
    "type": "commonjs",
    ...
    "scripts": {
        ...
        "eslint:comment": "使用 ESLint 检查并自动修复 src 目录下所有扩展名为 .js 和 .vue 的文件",
        "eslint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src",
    }
    ...
}
  • 注意:在这里需要将修改 “type”:“moudle"改为"commonjs” 。.eslintrc.js文件被视为ES模块文件,因为它是一个.js文件,其最近的父package.json包含"type": “module”,这声明了该包范围内的所有.js文件都作为ES模块。如果不修改运行 yarn eslint 将会报如下错误:

  • 请注意 typescript的版本是否兼容,如过报如下错误,你需要修改你的typescript版本

    解决方案:在这里我卸载了typescript然后安装了适配的typescript@5.1.3版本。由于每个人的版本下载不一样,所以可能存在差异。
yarn remove typescript
 yarn add typescript@5.1.3 --dev
  • 此时运行成功:
集成 Prettier

Prettier 是一个用来格式化代码的工具,或者称为包或插件。它的作用就是”格式化代码“,使代码更加整齐、易读 。官网地址

  • 安装
yarn add prettier eslint-config-prettier eslint-plugin-prettier --save-dev
  • 创建配置文件: .prettierrc.js
module.exports = {
    // 一行最多 80 字符
    printWidth: 80,
    // 使用 4 个空格缩进
    tabWidth: 4,
    // 不使用 tab 缩进,而使用空格
    useTabs: false,
    // 行尾需要有分号
    semi: true,
    // 使用单引号代替双引号
    singleQuote: true,
    // 对象的 key 仅在必要时用引号
    quoteProps: 'as-needed',
    // jsx 不使用单引号,而使用双引号
    jsxSingleQuote: false,
    // 末尾使用逗号
    trailingComma: 'all',
    // 大括号内的首尾需要空格 { foo: bar }
    bracketSpacing: true,
    // 箭头函数,只有一个参数的时候,也需要括号
    arrowParens: 'always',
    // 每个文件格式化的范围是文件的全部内容
    rangeStart: 0,
    rangeEnd: Infinity,
    // 不需要写文件开头的 @prettier
    requirePragma: false,
    // 不需要自动在文件开头插入 @prettier
    insertPragma: false,
    // 使用默认的折行标准
    proseWrap: 'preserve',
    // 根据显示样式决定 html 要不要折行
    htmlWhitespaceSensitivity: 'css',
    // 换行符使用 lf
    endOfLine: 'auto'
}
  • 修改 .eslintrc.js 配置
module.exports = {
    // ...
    extends: [
    // 使用 Vue.js 3 的推荐配置,这会应用一套 Vue.js 3 的最佳实践规则
    'plugin:vue/vue3-recommended',
    // 使用 TypeScript ESLint 插件的推荐配置,这会应用一套 TypeScript 的最佳实践规则
    'plugin:@typescript-eslint/recommended',
    // 使用 Prettier 的 ESLint 配置,用于关闭所有与 Prettier 格式化冲突的规则
    'prettier',
    // 使用 Prettier 插件的推荐配置,并设置 Prettier 为 ESLint 的格式化程序
    'plugin:prettier/recommended'
    ],
    // ...
};
  • 修改 package.json
{
    ...
    "scripts": {
        ...
        "prettier:comment": "自动格式化当前目录下的所有文件",
        "prettier": "prettier --write"
    }
    ...
}
  • 运行:prettier --write ./src/

4. 集成 vue-router4

  • 安装
yarn add vue-router --save
  • 使用
    src目录下新建一个router目录并新建index.ts文件
// 导入 Vue Router 的创建函数和类型
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
// 定义路由数组,其中每一个对象都对应一个路由
const routes: Array<RouteRecordRaw> = [
  {
    path: '/login', // 路由路径
    name: 'Login', // 路由名称
    meta: { // 路由元信息
      title: '登录', // 页面标题
      keepAlive: true, // 是否保持状态
      requireAuth: false // 是否需要权限验证
    },
    component: () => import('@/views/login.vue') // 路由对应的组件
  },
  {
    path: '/', // 路由路径
    name: 'Index', // 路由名称
    meta: { // 路由元信息
      title: '首页', // 页面标题
      keepAlive: true, // 是否保持状态
      requireAuth: true // 是否需要权限验证
    },
    component: () => import('@/views/index.vue') // 路由对应的组件
  }
];
// 使用 createRouter 创建一个新的路由实例
const router = createRouter({
  history: createWebHistory(), // 使用 HTML5 History API
  routes // 路由配置
});
// 导出路由实例,以便在其他地方使用
export default router;
  • 其中RouteRecordRaw是 Vue Router 中的一个接口,用于描述路由对象的类型。在 Vue Router 4.x 版本中,它被定义如下:
interface RouteRecordRaw {
   // 路由的路径
   path: string;
   // 可选,路由的名称
   name?: string;
   // 可选,应用于此路由的组件
   component?: Component;
   // 可选,键为字符串且值为组件的对象,用于定义命名视图
   components?: Record<string, Component>;
   // 可选,当用户访问此路由时应重定向到的路由
   redirect?: RedirectOption;
   // 可选,可以是布尔值,对象或 `RoutePropsFunction` 类型,用于将路由的参数转换为组件的 props
   props?: boolean | Object | RoutePropsFunction;
   // 可选,用于定义嵌套的子路由的 `RouteRecordRaw` 数组
   children?: RouteRecordRaw[];
   // 可选,任何类型,可以用于存储关于路由的附加信息
   meta?: any;
   // 可选,定义在导航到路由之前应运行的导航守卫
   beforeEnter?: NavigationGuardWithThis<undefined>;
}
  • main.ts 中引入并修改App.vue
//main.ts
import { createApp } from 'vue';
import './style.css';
import App from './App.vue';
import router from '@/router'
const app=createApp(App)
app.use(router)
app.mount('#app');
<template>
    <RouterView />
</template>
<script lang="ts" setup>
</script>
<style scoped></style>

vite+vue3+ts从0到1搭建企业级项目(3)https://developer.aliyun.com/article/1540140

目录
相关文章
|
27天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
128 64
|
2天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
12 3
|
27天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
31 8
|
26天前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
30 1
|
26天前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
35 1
|
1月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
6天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
1月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
40 1
vue学习第一章
|
1月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
30 1
|
1月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
38 1
vue学习第四章