初始化一个vite+vue3项目,配置eslint+Prettier

news2025/1/19 11:11:05

引用vite官网的一段话,解释一下我们为什么要选择使用vite

时过境迁,我们见证了诸如 webpack、Rollup 和 Parcel 等工具的变迁,它们极大地改善了前端开发者的开发体验。

然而,当我们开始构建越来越大型的应用时,需要处理的 JavaScript 代码量也呈指数级增长。包含数千个模块的大型项目相当普遍。基于 JavaScript 开发的工具就会开始遇到性能瓶颈:通常需要很长时间(甚至是几分钟!)才能启动开发服务器,即使使用模块热替换(HMR),文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率和幸福感。

Vite 旨在利用生态系统中的新进展解决上述问题:浏览器开始原生支持 ES 模块,且越来越多 JavaScript 工具使用编译型语言编写。

缓慢的服务器启动¶

当冷启动开发服务器时,基于打包器的方式启动必须优先抓取并构建你的整个应用,然后才能提供服务。

Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类,改进了开发服务器启动时间。

  • 依赖 大多为在开发时不会变动的纯 JavaScript。一些较大的依赖(例如有上百个模块的组件库)处理的代价也很高。依赖也通常会存在多种模块化格式(例如 ESM 或者 CommonJS)。

    Vite 将会使用 esbuild 预构建依赖。esbuild 使用 Go 编写,并且比以 JavaScript 编写的打包器预构建依赖快 10-100 倍。

  • 源码 通常包含一些并非直接是 JavaScript 的文件,需要转换(例如 JSX,CSS 或者 Vue/Svelte 组件),时常会被编辑。同时,并不是所有的源码都需要同时被加载(例如基于路由拆分的代码模块)。

    Vite 以 原生 ESM 方式提供源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际使用时才会被处理。

缓慢的更新¶

基于打包器启动时,重建整个包的效率很低。原因显而易见:因为这样更新速度会随着应用体积增长而直线下降。

一些打包器的开发服务器将构建内容存入内存,这样它们只需要在文件更改时使模块图的一部分失活,但它也仍需要整个重新构建并重载页面。这样代价很高,并且重新加载页面会消除应用的当前状态,所以打包器支持了动态模块热替换(HMR):允许一个模块 “热替换” 它自己,而不会影响页面其余部分。这大大改进了开发体验 —— 然而,在实践中我们发现,即使采用了 HMR 模式,其热更新速度也会随着应用规模的增长而显著下降。

在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失活[1](大多数时候只是模块本身),使得无论应用大小如何,HMR 始终能保持快速更新。

Vite 同时利用 HTTP 头来加速整个页面的重新加载(再次让浏览器为我们做更多事情):源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

一旦你体验到 Vite 的神速,你是否愿意再忍受像曾经那样使用打包器开发就要打上一个大大的问号了。

1,初始化项目

#我这里初始化一个名为 my-vue-app 的vue项目
# npm 6.x
npm create vite@latest my-vue-app --template vue

# npm 7+, extra double-dash is needed:
npm create vite@latest my-vue-app -- --template vue

2,下载依赖

vite项目与之前使用vue脚手架初始化项目不一样,初始化完成后,是没有依赖的,所以需要下载一下依赖

npm i 或者 npm install

3,为什么要使用eslint 和 Prettier?

前端开发中,一个项目可能会有多个人来维护,如果两个人一前一后修改同一个文件,刚好格式化规则不一致就会导致提交的差异难以查看,而且对于回滚或是排查问题都不太好处理,尤其是每次提交前,查看一堆差异化对比,对于代码的 review非常不友好,这里就需要统一开发规范和风格,如何保持代码风格一致性?靠人自律+口头约定显然是不行的,所以需要prettier这款代码格式化插件,通过约定代码风格规范,来避免每个开发人员代码风格不一致的问题,使用.prettier.js来约定代码风格。prettier是代码风格标准插件,eslint是代码质量校验插件,这两个可能会有冲突,所以要对这两个插件做兼容性处理。有了prettier为是么还需要eslint呢?eslint其本身也包含代码格式化功能,但是相比于prettier专门为了代码格式化而生来说,eslint有些情况下可能无法正确格式化,所以需要取两者之长,结合起来使用,prettier主要负责代码格式化,而eslint则主要用于代码质量校验,在编写过程中eslint对于不符合规范 (对prettier和eslint通过几个插件进行结合保证统一性) 的片段会有错误或警告提示 (红色或黄色波浪线) ,配合vite插件强制符合eslint规则才能完成运行查看或编译。

4,ESlint安装使用

#下载 eslint
npm add -D eslint
#初始化ESLint配置
npx eslint --init

配置初始化的选择

? How would you like to use ESLint? ...   #您希望如何使用ESLint
  To check syntax only   #仅检查语法
  To check syntax and find problems    #检查语法并查找问题
> To check syntax, find problems, and enforce code style    #检查语法、查找问题并强制执行代码样式
------------------------------------------------------------------------------
? What type of modules does your project use? ...  #您的项目使用什么类型的模块
> JavaScript modules (import/export)
  CommonJS (require/exports)
  None of these
------------------------------------------------------------------------------
? Which framework does your project use? ...  #您的项目使用哪个框架
  React
> Vue.js
  None of these
------------------------------------------------------------------------------
? Does your project use TypeScript? » No / Yes  你是否要使用Ts
------------------------------------------------------------------------------
? Where does your code run? ...  (Press <space> to select, <a> to toggle all, <i> to invert selection)    #你的代码在哪里运行。。。(按<space>选择,按<a>切换全部,按<i>反转选择)
√ Browser
√ Node
------------------------------------------------------------------------------
? How would you like to define a style for your project? ...  #您希望如何定义项目的样式
> Use a popular style guide   #使用流行的风格指南
  Answer questions about your style   #回答有关你风格的问题
------------------------------------------------------------------------------
? Which style guide do you want to follow? ...  #你想遵循哪种风格指南
> Standard: https://github.com/standard/eslint-config-standard-with-typescript #标准
  XO: https://github.com/xojs/eslint-config-xo-typescript
------------------------------------------------------------------------------
? What format do you want your config file to be in? ...  #您希望配置文件采用什么格式
> JavaScript
  YAML
  JSON
------------------------------------------------------------------------------
? Would you like to install them now? » No / Yes #是否立即安装它们
------------------------------------------------------------------------------
? Which package manager do you want to use? ...  #您要使用哪个包管理器
> npm
  yarn
  pnpm

安装完成后(根目录会生成.eslintrc.js文件)这个配置文件是默认生成的,注意生成的是.eslintrc.cjs,是cjs类型的文件。

module.exports = {
	"env": {
		"browser": true,
		"es2021": true,
		"node": true
	},
	"extends": [
		"eslint:recommended",
		"plugin:vue/essential",
		"plugin:@typescript-eslint/recommended"
	],
	"parserOptions": {
		"ecmaVersion": "latest",
		"parser": "@typescript-eslint/parser",
		"sourceType": "module"
	},
	"plugins": [
		"vue",
		"@typescript-eslint"
	],
	"rules": {
		"indent": [
			"error",
			"tab"
		],
		"linebreak-style": [
			"error",
			"unix"
		],
		"quotes": [
			"error",
			"double"
		],
		"semi": [
			"error",
			"always"
		]
	}
}; 

安装vite-plugin-eslint(eslint结合vite使用)

// 说明: 这个包是用于配置vite运行的时候自动检测eslint规范 不符合页面会报错
npm add -D vite-plugin-eslint 

安装eslint-parser

npm add -D @babel/core 
npm add -D @babel/eslint-parser

配置vite.config.ts

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import eslintPlugin from 'vite-plugin-eslint';

export default defineConfig({
	plugins: [
		vue(),
		eslintPlugin({
			include: ['src/**/*.ts', 'src/**/*.vue', 'src/*.ts', 'src/*.vue'],
		}),
	],
	resolve: {
		// 配置路径别名
		alias: {
			'@': '/src',
		},
	},
});

在VsCode插件商店找到ESLint插件然后安装它就OK

 5,prettier的安装与使用

安装prettier

npm add -D prettier
npm add -D eslint-config-prettier        #eslint兼容的插件
npm add -D eslint-plugin-prettier        #eslint的prettier

在根目录下面添加.prettierrc.js文件夹,把下边的配置放进去。如果不想格式化某些文件可以再添加一个.prettierignore的文件,用法和.gitignore文件差不多,将不需要格式化的文件夹或文件通过正则匹配或者具名的方式添加进去,这样就不会格式化对应的文件了。

/** .prettierrc.js
 * 在VSCode中安装prettier插件 打开插件配置填写`.prettierrc.js` 将本文件作为其代码格式化规范
 * 在本文件中修改格式化规则,不会同时触发改变ESLint代码检查,所以每次修改本文件需要重启VSCode,ESLint检查才能同步代码格式化
 * 需要相应的代码格式化规范请自行查阅配置,下面为默认项目配置
 */
module.exports = {
	// 一行最多多少个字符
	printWidth: 150,
	// 指定每个缩进级别的空格数
	tabWidth: 2,
	// 使用制表符而不是空格缩进行
	useTabs: true,
	// 在语句末尾是否需要分号
	semi: true,
	// 是否使用单引号
	singleQuote: true,
	// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
	quoteProps: 'as-needed',
	// 在JSX中使用单引号而不是双引号
	jsxSingleQuote: false,
	// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
	trailingComma: 'es5',
	// 在对象文字中的括号之间打印空格
	bracketSpacing: true,
	// jsx 标签的反尖括号需要换行
	jsxBracketSameLine: false,
	// 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
	arrowParens: 'always',
	// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
	rangeStart: 0,
	rangeEnd: Infinity,
	// 指定要使用的解析器,不需要写文件开头的 @prettier
	requirePragma: false,
	// 不需要自动在文件开头插入 @prettier
	insertPragma: false,
	// 使用默认的折行标准 always\never\preserve
	proseWrap: 'preserve',
	// 指定HTML文件的全局空格敏感度 css\strict\ignore
	htmlWhitespaceSensitivity: 'css',
	// Vue文件脚本和样式标签缩进
	vueIndentScriptAndStyle: false,
	//在 windows 操作系统中换行符通常是回车 (CR) 加换行分隔符 (LF),也就是回车换行(CRLF),
	//然而在 Linux 和 Unix 中只使用简单的换行分隔符 (LF)。
	//对应的控制字符为 "\n" (LF) 和 "\r\n"(CRLF)。auto意为保持现有的行尾
	// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
	endOfLine: 'auto',
}; 

在VsCode插件商店找到prettier插件并安装

 6,prettier和eslint结合使用

前边我们说到,prettier和eslint会产生冲突,所以接下来要调整一下.eslintrc.cjs文件,通过几个扩展,来完成vue3、ts、prettier的规则和eslint插件结合使用,配置如下面代码所示。Vue3的setup语法糖中有几个宏定义,如果不声明直接引用会报错,这里可以在配置文件中加入globals配置项,通过全局声明这几个宏定义,就可以直接使用这几个函数不用再提前声明了,eslint检查也会正常通过。

/** .eslintrc.js
 * 在VSCode中安装ESLint插件,编写过程中检测代码质量
 * ESLint 代码质量校验相关配置
 * 这里使用prettier作为代码格式化工具,用ESLint做代码质检
 * 相关配置使用下面extends扩展先做默认设置
 * 在.prettierrc.js文件中配置好后,格式化规则会以.prettierrc.js作为最终格式,所以不建议在本文件中做代码格式化相关配置
 * 相关prettier配置ESLint会默认加载为代码质检 格式化以prettier为主
 * 在本配置文件中只做代码质量约束规范配置
 */
module.exports = {
	root: true,
	env: {
		browser: true,
		node: true,
	},
	extends: [
		'eslint-config-prettier',
		'eslint:recommended', // 使用推荐的eslint
		'plugin:@typescript-eslint/recommended',
		'plugin:vue/vue3-recommended', // 使用插件支持vue3
		'plugin:vue/vue3-essential',
		//1.继承.prettierrc.js文件规则2.开启rules的 "prettier/prettier": "error"3.eslint fix的同时执行prettier格式化
		'plugin:prettier/recommended',
	],
	parser: 'vue-eslint-parser',
	parserOptions: {
		ecmaVersion: 2020,
		sourceType: 'moudule',
		parser: '@typescript-eslint/parser',
	},
	plugins: [],
	globals: {
		defineProps: 'readonly',
		defineEmits: 'readonly',
		defineExpose: 'readonly',
		withDefaults: 'readonly',
	},
	rules: {
		'no-console': process.env.NODE_ENV === 'production' ? ['error', { allow: ['error', 'warn'] }] : 'off', //生产模式不允许使用log
		'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', //生产默认不允许使用debugger
		'@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '.*', args: 'none' }], //变量声明未使用
		'@typescript-eslint/no-explicit-any': 'off', // 允许ts使用any
		// '@typescript-eslint/no-var-requires': 'off', // 强制使用 import 且不允许使用 require 设置off关闭检查
		// 'vue/require-v-for-key': 'off', // 对保留元素检查 vue3中v-for会自动追加key值,所以不用再强制添加key属性,所以不检查key的填写
		// 'vue/valid-v-for': 'off', // 对于非保留(自定义)元素检查vue3中v-for会自动追加key值,所以不用再强制添加key属性,所以不检查key的填写
		// // 添加组件命名忽略规则 vue官方默认规则是多单词驼峰来进行组件命名
		// 'vue/multi-word-component-names': [
		// 	'warn',
		// 	{
		// 		ignores: ['index'], //需要忽略的组件名
		// 	},
		// ],
	},
}; 

7,踩坑

配置到这一步时,一切都完全正常,但是我们运行npm run dev后就会出现报错

 看了网上一些大佬说的,要配置vite.config.js     cache: false去清除缓存,但是我试了,并没有什么用

 这时我们再去仔细看报错信息,发现有一段话

.prettierrc.js is treated as an ES module file as
 it is a .js file whose nearest parent package.json 
contains "type": "module" which declares all .js 
files in that package scope as ES modules.

大概意思呢就是.pellerrc.js被视为ES模块文件,因为它是一个.js文件,它的package.json包含“type”:“module”,该文件将该包范围内的所有.js文件声明为ES模块。

所以我们现在在这里将刚才根目录下添加的 .prettierrc.js   更改为   .prettierrc.cjs,再来npm run dev 项目正常运行

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

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

相关文章

Java后端数据校验学习总结

Java后端校验总结 后端校验注解一直在用&#xff0c;但是感觉不是特别清楚&#xff0c;希望通过写这篇文章搞清楚。 Spring自带的Validation校验框架 Spring提供了Validator接口来校验对象&#xff0c;主要涉及到的方法和类如下&#xff1a; supports方法&#xff1a;设置校…

win11任务栏图标闪烁|任务栏QQ图标闪动|新消息任务栏自动弹出|设置自动隐藏任务栏之后,QQ或微信等工具新消息自动弹出任务栏并颜色提示问题解决方案

背景介绍: 今天正常使用电脑时也出现消息弹出问题(已经设置隐藏任务栏),很头疼那么时什么情况,该如何组去解决呢?(微信任务栏闪动未读消息) MyDockFinder Windows 桌面美化工具 目录 背景介绍 解决问题 微信环境测试 初始界面&#xff08;微信&#xff09; 打开微信 …

PostMan简介2022黑马跟学

2022黑马PostMan简介跟学1.PostMan工具的使用1.1 PostMan简介1.2 PostMan安装1.3 PostMan使用1.3.1 创建WorkSpace工作空间1.3.2 发送请求(1).以百度为例发送get请求(2).以百度为例发送post请求1.3.3 保存当前请求1.3.4 创建server端1.PostMan工具的使用 1.1 PostMan简介 代码…

运算放大电路(三)-加法器

加法器 由虚短知&#xff1a; V- V 0 ……a 由虚断及基尔霍夫定律知&#xff0c;通过R2与R1的电流之和等于通过R3的电流&#xff0c;故 (V1 – V-)/R1 (V2 – V-)/R2 (Vout – V-)/R3 ……b 代入a式&#xff0c;b式变为 V1/R1 V2/R2 Vout/R3 如果取 R1R2R3 则上式变为 Vo…

ideal整合reids实现缓存查询

目录 前言&#xff1a; 一.工作流程 二. RedisConfig类 三.application.properties 四.开启linux中的redis 五.使用redis结合数据库进行数据查询 5.1编程式缓存 5.2声明式缓存 5.2.1在启动类上添加注解 5.2.2实现代码 六.运行结果 ​编辑 前言&#xff1a; 废话不多讲…

Java文件读写和CSV文件解析(读取csv文件的一列或若干列)

文件类 Java 读文件流的知识不可少&#xff0c;先复习一下吧&#xff01; OREACLE JDK8 DOCS 文件类是Java IO的一个对象&#xff0c;用于指定文件的相关信息&#xff0c;位置和名称信息。如txt文件&#xff0c;csv文件对Java来说就是一个文件类。 开发手册中指出&#xff0…

Android实战场景 - 保存WebView中的图片到相册

去年同事写了一个 “在H5中保存图片到相册” 的功能&#xff0c;虽然有大致实现思路&#xff0c;实现起来也没问题&#xff0c;但是感觉同事考虑问题的很周全&#xff0c;当时候就想着去学习一下&#xff0c;但是项目太赶没顾得上&#xff0c;索性现在有时间&#xff0c;准备好…

2023-02-01 读书笔记:《有趣的统计》-1-基础知识

2023-02-01 读书笔记&#xff1a;《有趣的统计》-1-基础知识 75招学会数据分析 —— 2014 Doctor.Bruce Frey 序 统计学&#xff1a; 最初&#xff0c;用于确定某些事情发生的可能性&#xff1b;不断发展&#xff0c;根据样本数据准确推断总体数据特征的方法&#xff08;推…

c语言基础之分支和循环语句

c语言基础之分支和循环语句分支语句和循环语句什么是语句&#xff1f;if语句switch语句在switch语句中的 breakwhile循环while语句中的break和continuefor循环break和continue在for循环中do...while()循环goto语句写在最后&#xff1a;&#x1f4cc;————本章重点————&a…

全球疫情期间的校园招聘:可以学到的6个教训

疫情放开后&#xff0c;校园招聘逐渐回暖&#xff0c;谁能率先有效整合线上线下校招&#xff0c;企业将从一开始就处于战略领先地位。下面梳理了全球招聘团队在疫情期间的6个校招教训&#xff0c;希望对你有启发。01重新规划线上工具的应用玩法现如今&#xff0c;学生已通过网课…

【C++提高编程】vector容器详解(附测试用例与结果图)

目录1.vector容器1.1 vector基本概念1.2 vector构造函数1.3 vector赋值操作1.4 vector容量和大小1.5 vector插入和删除1.6 vector数据存取1.7 vector互换容器1.8 vector预留空间1.vector容器 1.1 vector基本概念 功能&#xff1a; vector数据结构和数组非常相似&#xff0c;…

【C++】类和对象(上)

文章目录1. 面向过程和面向对象的初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算对象的大小7.2 类对象的存储方式7.3 结构体内存对齐规则8. this指针8.1 this指针的引出8.2 this指针的特性…

性能技术分享|Jmeter+InfluxDB+Grafana搭建性能平台(二)

二、CentOS安装&#xff1a;方式一&#xff1a;把下载的.rpm包推送到服务器上&#xff1b;方式二&#xff1a;直接命令行安装#下载wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.1.x86_64.rpm#安装yum localinstall?influxdb-1.7.1.x86_64.rpm -y2.3 修改配…

三十一、RabbitMQ(2)

&#x1f33b;&#x1f33b; 目录一、RabbitMQ 入门及安装1.1 概述1.3 Erlang 安装1.2.1 安装下载1.2.3 安装依赖环境1.2.4 安装 Erlang1.2.4 Erlang安装成功1.3 安装 RabbitMQ1.5启动 rabbitmq 服务1.4 开启管理界面及配置1.5.1 设置配置文件二、RabbitMQWeb 管理界面及授权操…

【JVM】垃圾回收算法与分代回收

文章目录1. 垃圾回收算法概述2. 标记-清除算法3. 标记-复制算法4. 标记-整理算法5. 分代回收本文参考&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09; 1. 垃圾回收算法概述 根据判定对象消亡的角度来看&#xff0c;垃圾收集算…

基于PHP的学院社团管理系统

摘 要“互联网”的战略实施后&#xff0c;很多行业的信息化水平都有了很大的提升。但是目前很多学校日常工作仍是通过人工管理的方式进行&#xff0c;需要在各个岗位投入大量的人力进行很多重复性工作&#xff0c;这样就浪费了许多的人力物力&#xff0c;工作效率较低&#xff…

Python爬虫4-Scrapy爬虫框架入门了解

目录1、Scrapy爬虫框架介绍1.1 requests库和Scarpy爬虫的比较1.2 Scrapy爬虫的常用命令2、Scrapy爬虫基本使用2.1 步骤2.2 yield关键字的使用1、Scrapy爬虫框架介绍 安装Scrapy库&#xff1a;pip install scrapy 爬虫框架&#xff1a;是实现爬虫功能的一个软件结构和功能组件集…

手动挂载apex镜像

手动挂载apex镜像 1.loop设备 在类 UNIX 系统里&#xff0c;loop 设备是一种伪设备(pseudo-device)&#xff0c;或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。 这要先从mount的流程来理解&#xff0c;挂载操作&#xff0c;实际上就是把设备上的文件系统/目…

【MyBatis】核心配置文件,三大对象的作用域,#{}和${}的区别

1. environment环境:一般一个环境environment会对应一个SqlSessionFactory对象sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"另一个环境的id");// 数据库环境配置在这个标签里 // 这里的default表示默认使用的环…

Spring Security 源码解读 :基本架构及初始化

Spring Security 是基于web的安全组件&#xff0c;所以一些相关类会分散在 spring-security包和web包中。Spring Security通过自定义Servlet的Filter的方式实现&#xff0c;具体架构可参考官网Spring Security: Architecture 这里使用Spring Boot 2.7.4版本&#xff0c;对应Sp…