当前位置: 首页 > news >正文

vue3项目的创建与配置

本文将从0 到 1 实现vue3项目的配置,主要是介绍npm create vite

目录

项目初始化区分

快速创建方式

创建方式区别

npm create vite 方式

npm create vue@latest 方式

npm create vite 项目配置

项目初始化

全局下载pnpm

利用pnpm和vite进行项目初始化 

安装包,启动项目

访问项目

删除不必要的文件 

项目配置 

自动访问项目

eslint的配置

什么是eslint

初始化eslint

修改配置

添加检查规范命令 

Prettier的配置

什么是Prettier?

下载安装

配置

解决eslint与prettier的冲突,和简单配置

新建.prettierrc配置规则

新建.prettierignore,配置忽略检查文件

检查是否配置成功

vscode设置自动保存使用prettier规范

stylelint配置

什么是stylelint

下载安装

配置

新建stylelint.config.js

新建.stylelintignore

配置命令

src别名配置

vite.config.ts中配置

tsconfig.json中配置

配置环境变量 

创建文件

配置启动或打包不同的环境

默认启动和默认打包

配置其他环境

配置scss

安装scss

集成reset.scss

配置scss的变量 

  elementUI的配置(按需配置)

全局下载

引入使用

icon的按需引入


当前node版本: node v18.20.1

项目初始化区分

快速创建方式

针对项目初始化,目前项目快速创建比较多的是以下两种方式

  • 直接使用vite快速构建
npm create vite
  • 基于vue cli创建
npm create vue@latest

创建方式区别

npm create vite 方式

生成的项目结构为较为简洁,只有项目最最基本的功能,初始依赖相对较少,仅包含 Vite、Vue 核心库等基础依赖。需要后续根据项目手动安装和配置其他工具,如代码检查、格式化、状态管理等。更加适用于快速搭建原型或小型项目,而且希望自己掌握项目的每一个配置细节,根据需求逐步的添加功能和工具。

npm create vue@latest 方式

相比会有更多的配置项,如Vue Router,eslint等选择

更适合大型项目或对项目配置不熟悉的开发,可以帮助开发快速搭建一个功能齐全,符合一定规范的项目结构,节省了大量的配置时间和精力

npm create vite 项目配置

项目初始化

全局下载pnpm

npm i -g pnpm

利用pnpm和vite进行项目初始化 

pnpm create vite

安装包,启动项目

 根据提示:进入文件夹,安装包,启动项目,可以看到启动的默认端口是5173

cd vue3-admin
pnpm install
pnpm run dev

 

访问项目

删除不必要的文件 

将原本后续项目不需要的文件删除

svg图片,css等

项目配置 

1.自动访问项目

在pnpm run dev后希望浏览器能自动打开访问项目

"scripts": {
    "dev": "vite --open"
  },

2.eslint的配置

什么是eslint

ESLint 中文网

eslint用于规范代码,可以通过插件配置规范代码的语法,自定义编码标准,帮助团队编写更清晰更易于维护代码

初始化eslint

成功安装后,会自动出现eslint.config.js文件

修改配置

对文件添加js的规范,忽略检查规范的文件

import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";


/** @type {import('eslint').Linter.Config[]} */
export default [
  {files: ["**/*.{js,mjs,cjs,ts,vue}"]},
  {
    ignores: [
      '**/*.config.js',
      'dist/**',
      'node_modules/**',
      '!**/eslint.config.js',
      '.vscode',
      'config/*',
    ],
  },
  {languageOptions: { globals: globals.browser }},
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs["flat/essential"],
  {files: ["**/*.vue"], languageOptions: {parserOptions: {parser: tseslint.parser}}},
];
添加检查规范命令 

1.项目src下的文件要使用eslint

2. 快速修正src下文件的eslint错误

至此可以使用命令去看看是否配置成功

3.Prettier的配置

安装 · Prettier 中文网

什么是Prettier?

prettier是专注于代码格式化的工具,关于代码外观的一致性,如缩进,引号,分号等,主要是消除不同开发之前的代码风格争议

与eslint的区别很简单:如eslint是规范代码使用const 还是let, pertteirt在意的是你是用的双引号还是单引号。eslint强调代码正确性,Prettier强调风格的一致性

同时使用,可以互补,让项目开发过程中的代码风格和习惯保持一致性,提高代码质量和可维护性

下载安装
pnpm add eslint-config-prettier prettier  -D

eslint-config-prettier:这是一个 ESLint 插件,它将 Prettier 应用到 ESLint 中。它会使用 Prettier 来格式化代码,并将格式化结果作为 ESLint 的一项规则来检查代码。使用 eslint-plugin-prettier 可以在代码检查的同时,自动格式化代码,使其符合 Prettier 的规则

配置
解决eslint与prettier的冲突,和简单配置
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'

在eslint.config.js中配置 

新建.prettierrc配置规则
 {
    "printWidth": 120,
    "tabWidth": 2, 
    "useTabs": false, 
    "singleQuote": true, 
    "semi": false, 
    "trailingComma": "none", 
    "arrowParens": "avoid",
    "bracketSpacing": true, 
    "endOfLine": "auto", 
    "quoteProps": "preserve" 
  }
  
  
新建.prettierignore,配置忽略检查文件
.DS_Store
node_modules
dist
dist-ssr
*.local
.npmrc
dev-dist
dist_electron
auto-imports.d.ts
检查是否配置成功

配置完成后,可以写一些错误代码进行测试

写代码,在执行npm run fix,则配置成功且使用

vscode设置自动保存使用prettier规范

用命令的当时其实很麻烦,每次都需要输入命令,我们可以使用vsdoe插件进行设置,文件保存就自动使用prettier

vscode 安装插件

点击右下角设置,搜索default fomatter,更改默认方式

设置-》文本编辑-》格式化-》fomat on save

设置成功后,将会保存时自动按照prettier格式保存 

4.stylelint配置

Stylelint 中文网

什么是stylelint

stylelint是一个强大的css代码检查工具,可以检查scss.less等语法,统一开发者的编码风格

下载安装
pnpm add scss stylelint-config-prettier stylelint-config-recess-order stylelint-config-recommended-scss stylelint-config-standard stylelint-config-standard-scss stylelint-config-standard-vue stylelint-order stylelint-prettier stylelint-scss
配置
新建stylelint.config.js
export default {
  // 设置为根路径
  root: true,
  plugins: ['stylelint-prettier'],
  extends: [
    // standard 规则集合
    'stylelint-config-standard',
    // standard 规则集合的 scss 版本
    'stylelint-config-standard-scss',
    // 样式属性顺序规则
    'stylelint-config-recess-order',
    // 接入 Prettier 规则
    // 'stylelint-config-prettier',
    'stylelint-prettier/recommended'
  ],
  // 忽略所有文件,除了 src 目录下的文件,并且忽略 src 目录下的 JavaScript 和 TypeScript 文件。
  ignoreFiles: ['**/*', '!src/**/*', 'src/**/*.{js,jsx,ts,tsx}'],
  rules: {
    'prettier/prettier': true,
    // 忽略以 get- 和 v- 开头的函数
    'function-no-unknown': [true, { ignoreFunctions: ['/^get-/', '/^v-/'] }],
    // 强制类名遵循特定的命名模式,支持 BEM 命名法和 Mui 前缀的类名。
    'selector-class-pattern':
      '^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$|^Mui.*$|^([a-z][a-z0-9]*)(_[a-z0-9]+)*$',
    'font-family-no-missing-generic-family-keyword': null,
    'scss/dollar-variable-pattern': null,
    'block-no-empty': null,
    'no-empty-source': null,
    'property-no-unknown': null,
    'no-descending-specificity': null,
    // 忽略未知的选择器
    'selector-pseudo-class-no-unknown': [
      true,
      {
        ignorePseudoClasses: ['export', 'deep', 'global', 'import']
      }
    ],
    // 在规则之前总是添加空行,除了第一个嵌套规则和注释后面的规则。
    'rule-empty-line-before': [
      'always',
      {
        except: ['first-nested'],
        ignore: ['after-comment']
      }
    ],
    // 在自定义属性之前总是添加空行,除了在另一个自定义属性之后和第一个嵌套规则。
    'custom-property-empty-line-before': [
      'always',
      {
        except: ['after-custom-property', 'first-nested']
      }
    ],
    // 在声明之前总是添加空行,除了在另一个声明之后和第一个嵌套规则。
    'declaration-empty-line-before': [
      'always',
      {
        except: ['after-declaration', 'first-nested']
      }
    ],
    // 忽略以下at规则
    'at-rule-no-unknown': [
      true,
      {
        ignoreAtRules: [
          'tailwind',
          'apply',
          'variants',
          'responsive',
          'screen',
          'function',
          'if',
          'each',
          'include',
          'mixin',
          'return',
          'use'
        ]
      }
    ],
    // 忽略 rpx 单位。
    'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }],
    'order/order': [
      [
        'dollar-variables',
        'custom-properties',
        'at-rules',
        'declarations',
        {
          type: 'at-rule',
          name: 'supports'
        },
        {
          type: 'at-rule',
          name: 'media'
        },
        'rules'
      ],
      { severity: 'warning' }
    ],
    // 忽视 -webkit-xxxx 等兼容写法
    'property-no-vendor-prefix': [
      true,
      {
        ignoreProperties: ['box-shadow']
      }
    ]
  },
  overrides: [
    {
      files: ['src/**/*.vue'],
      extends: ['stylelint-config-standard-scss', 'stylelint-config-recommended-vue'],
      rules: {
        'scss/dollar-variable-pattern': null,
        'block-no-empty': null,
        'comment-empty-line-before': null,
        'no-empty-source': null,
        'property-no-unknown': null,
        'selector-pseudo-class-no-unknown': [
          true,
          {
            ignorePseudoClasses: ['deep', 'v-deep']
          }
        ]
      }
    }
  ]
}
新建.stylelintignore
node_modules
dist
配置命令
 "lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"

配置命令之后,也可以写测试代码,执行命令看是否成功

也推荐使用vscode插件 - Stylelint 

5.src别名配置

通常情况下,项目中都不会写太多的../../../之类的,都会进行配置,提高可读性和维护性

两个地方配置

vite配置中: 可以让vite在开发和构建过程中正确的解析路径别名

ts配置中: 仅仅是处理ts代码编译阶段,让编译器能正确解析路径别名

vite.config.ts中配置
 resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  }

配置后,path会被编译器标红,我们需要再进行配置

因为path是node环境的变量,在项目初始化时,我们选择了运行环境环境是浏览器环境,因此ts检测后会标红,这时需要再ts中配置,vite.config.ts在node环境下运行;写好之后可以重启vscode,vscode有时候会反应有些慢

 {
    overrides: [
      {
        files: ['vite.config.ts'],
        env: {
          node: true
        }
      }
    ]
  },

tsconfig.json中配置

6.配置环境变量 

通常情况,项目中会根据不同的环境配置不同的环境变量,在vite中是怎么配置的呢

创建文件

Vite 默认支持 .env 文件来管理环境变量,并且可以根据不同环境创建特定的环境变量文件。常见的环境变量文件有:

  • .env:所有环境都会加载的基础环境变量(所有环境公用)。
  • .env.development:开发环境专用的环境变量。
  • .env.production:生产环境专用的环境变量。
  • .env.test:测试环境专用的环境变量。

注意一点,文件中的变量必须是VITE_ 开头的环境变量才能在客户端代码中被访问

客户端访问

import.meta.env.变量名

如:创建生产环境

那么客户端就可以进行访问了

配置启动或打包不同的环境
默认启动和默认打包
npm run dev

默认启动的时候读取的是配置.env 和 .env.development 

npm run build

 默认打包读取的配置.env 和 .env.production

配置其他环境

如果想要其他环境,可以新增其他命令,利用 --mode 环境模式启动或打包其他环境

vite --mode test

案例

7.配置scss

其实在之前配置stylelint已经安装过scss了,如果已经安装过scss了可以忽略

安装scss
pnpm install scss
集成reset.scss

移除每个浏览器不同的默认样式

src下创建styles, styles下创建两个scss,reset.scss和index.scss

reset.scss

/* 全局重置样式 */
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}

/* HTML5 显示角色重置为块级元素 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
  display: block;
}

/* 重置列表样式 */
ol,
ul {
  list-style: none;
}

/* 重置引用样式 */
blockquote,
q {
  quotes: none;
}

blockquote:before,
blockquote:after,
q:before,
q:after {
  content: '';
  content: none;
}

/* 重置表格样式 */
table {
  border-collapse: collapse;
  border-spacing: 0;
}

/* 重置链接样式 */
a {
  text-decoration: none;
  color: inherit;
}

/* 重置按钮样式 */
button {
  background: none;
  border: none;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  outline: none;
}

/* 重置输入框样式 */
input,
textarea {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border: none;
  background: none;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  outline: none;
}

/* 重置选择框样式 */
select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border: none;
  background: none;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  outline: none;
}

/* 移除 IE 下的默认清除按钮 */
input::-ms-clear {
  display: none;
}

/* 移除 Firefox 下的默认边框 */
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}

/* 重置图片样式 */
img {
  max-width: 100%;
  height: auto;
  display: block;
}

index.scss中引入

@import url(./reset.scss);

main.ts中引入index.scss

import '@/styles/index.scss'

上面步骤只是引入了scss,会发现scss中的变量是无法使用的 

配置scss的变量 

1.创建单独文件variable.scss在其中定义变量

2.vite.config.ts中配置

 css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@use "@/styles/variable.scss";'
      }
    }
  }

3.任何scss地方使用变量

p {
  color: variable.$color;
}

scss变量的时候要注意几个问题

1. Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0, scss如果使用的高版本,要用@use,配置时不能使用@import

2. Can't find stylesheet to import.报错 

3. 重复引入module报错 

具体详解: vite配置scss全局变量-CSDN博客

  8.elementUI的配置(按需配置)

全局下载
pnpm install element-plus @element-plus/icons-vue
引入使用

icon的按需引入

9.axios的封装和api管理 

9.1 下载axios

npm install axios

9.2 src下创建文件夹utils,utils下创建request.ts

import axios from 'axios'
import { ElMessage } from 'element-plus'

const request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API, // 基础路径
  timeout: 50000 // 超时时间
})

// 请求拦截
request.interceptors.request.use(config => {
  // 配置请求的公共参数
  config.headers.token = 'token' // 根据项目自己存储让获取token
  return config
})

// 响应拦截
request.interceptors.response.use(
  res => {
    // 成功回调
    console.log(res)
    return res.data
  },
  err => {
    // 失败回调, 处理网络错误
    const status = err.response.status
    let msg = '网络错误'
    switch (status) {
      case 401:
        msg = 'TOKEN过期'
        break
      case 403:
        msg = '无权访问'
        break
      case 404:
        msg = '请求错误'
        break
      case 500:
        msg = '服务器错误'
        break
      default:
        break
    }
    ElMessage({
      type: 'error',
      message: msg
    })
    return Promise.reject(err)
  }
)

export default request

9.3 在src下创建apis文件夹

以用户登录和获取用户信息接口为例

apis下创建users文件夹,users下分别创建index.ts和type.ts

index.ts 统一管理请求

import request from '@/utils/request'
import type { loginForm, loginResData, userInfoRes } from './type.ts'

// 登录接口
export const login = (data: loginForm) => request.post<any, loginResData>('/login', data)

// 获取用户数据
export const userInfo = () => request.get<any, userInfoRes>('/userInfo')

type.ts 定义数据类型

// 登录参数
export interface loginForm {
  username: string
  password: string
}

interface dataType {
  token: string
}

// 登录返回参数类型
export interface loginResData {
  code: number
  data: dataType
}

interface user {
  userId: number
  avatar: string
  username: string
  roles: string[]
  buttons: string[]
  routes: string[]
}

export interface userInfoRes {
  code: number
  data: user
}

相关文章:

  • tailscale + derp中继 + 阿里云服务器 (无域名版)
  • 02.19 构造函数
  • 深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作
  • 数据录入与处理岗位
  • LeetCode - 18 四数之和
  • numpy(01 入门)
  • goland无法debug项目
  • pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原
  • Qt之多线程处理
  • MySQL六大日志的功能介绍。
  • c++标准io与线程,互斥锁
  • Django 连接(sqlserver)数据库方法
  • DeepSeek + Mermaid编辑器——常规绘图
  • IO进程 day01
  • SpringBoot原理
  • go-micro
  • 在C#中动态访问对象属性时,用表达式树可以获得高效性能
  • line 1: $‘\r‘: 解决linux和windows换行符问题
  • 【3.2JavaScript】JavaScript语法基础
  • 改进的霍尔迁移率测量方法区分4H-SiC反型沟道中的界面俘获效应
  • 女孩患异食癖爱吃头发,一年后腹痛入院体内惊现“头发巨石”
  • 中哥两国元首共同见证签署《中华人民共和国政府与哥伦比亚共和国政府关于共同推进丝绸之路经济带和21世纪海上丝绸之路建设的合作规划》
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 美政府以拨款为要挟胁迫各州服从移民政策,20个州联合起诉
  • 中华人民共和国和巴西联邦共和国关于强化携手构建更公正世界和更可持续星球的中巴命运共同体,共同维护多边主义的联合声明
  • 福建厦门市副市长、市公安局局长陈育煌出任吉林省公安厅厅长