vue3之写一个aichat项目------项目初始化

server/2025/3/18 8:12:00/

创建项目

1、执行命令

npm create vite@latest

2、执行命令后根据需要选择,并执行后续命令
在这里插入图片描述

添加ESLint 代码规范

ESLint 文档
ESLint对javascript语法检测、限制和修复,对代码进行格式化,但是不能对css、less等格式化,目的是使代码更加一致和避免错误
在刚刚建好的项目下执行命令

npm init @eslint/config@latest

在这里插入图片描述
上面选择接受
选择默认的检查语法和发现问题
在这里插入图片描述
接着询问使用什么类型的模块
在这里插入图片描述
JavaScript modules (import/export):ES6引入的原生模块系统,使用import和export关键字,这种模块系统提供了静态结构(在编译时就能确定模块依赖关系),有助于优化和更好的理解代码结构

//导出模块
export function exportFun(){}
//导入模块
import { exportFun } from '导出模块的文件路径'

CommonJS(require/exports): CommonJS主要是Node.js环境下的模块系统,使用require()来导入模块,使用module.exports或exports来导出模块,与ES6模块不同,CommonJS的动态的,意味着模块依赖可以在运行时决定

//导出模块
module.exports = function exportFun(){}
//导入模块
const exportFun = require('导出模块文件地址')

**None of these:**如果选择这个选项,意味着当前的项目不直接使用上述任何一种模块系统,既没有使用ES6模块也没有使用CommonJS模块
在开始新项目时,考虑未来兼容性和标准化,一般倾向于使用ES6模块

接着选择项目的框架,这里我选择的是vue
在这里插入图片描述
项目使用使用typescript ,No
在这里插入图片描述
代码运行在哪
这里选择Browser
Browser:如果你的代码主要在浏览器环境中运行,选择这个选项。这会启用与浏览器相关的规则和环境设置。
Node:如果你的代码主要在 Node.js 环境中运行,选择这个选项。这会启用与 Node.js 相关的规则和环境设置。
在这里插入图片描述
你所选择的配置需要以下依赖,你是否选择现在安装它们,选择Yes
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9939af7a52944246bab20191bd4455f3.png

在这里插入图片描述
你希望使用哪个包管理器?这里就选择默认的
npm: Node.js的默认包管理器
yarn: Facebook开发的包管理器,提供更快的安装速度和更好的依赖锁定
pnpm: 一个快速切节省磁盘空间的包管理器
bun: 一个新兴的、高性能的JavaScript运行时和包管理器
在这里插入图片描述
上述步骤完成后,就会在项目的根目录下得到一个eslint.config.js文件,内容如下

import globals from "globals";//包含各种全局变量的集合,例如浏览器环境中的全局变量、Node.js环境中的全局变量等
import pluginJs from "@eslint/js";//ESLint的官方JavaScript插件,提供了推荐的配置和规则
import pluginVue from "eslint-plugin-vue";//ESLint的Vue插件,用于lint vue.js文件/** @type {import('eslint').Linter.Config[]} *///JSDoc注释,用于指定导出类型为ESLint配置数组
// 导出一个默认的配置数组
export default [{files: ["**/*.{js,mjs,cjs,vue}"]},//指定要检查的文件类型,包括Java删除riot文件(.js,.mjs,.cjs)和vue文件(.vue){languageOptions: { globals: globals.browser,env:{browser: true,//指定全局变量为浏览器环境中的全局变量node: true,//指定全局变量为Node.js环境中的全局变量} }},//配置语言选项,指定全局变量为浏览器环境中的全局变量pluginJs.configs.recommended,//引入JavaScript插件的推荐配置...pluginVue.configs["flat/essential"],//引入Vue插件的"essential"配置,使用扩展运算符(...)将其展开// 自定义规则{rules: {"semi": ["error"],//指定必须使用分号"indent": ["error", 2],//指定缩进为2个空格"linebreak-style" : ["error", "unix"],//指定换行符为unix风格"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",//在生产环境中禁用console.log,在开发环境中允许使用"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",//在生产环境中禁用debugger,在开发环境中允许使用}}
];

在这里插入图片描述

配置package.json脚本文件

在项目中运行ESLint,检查所有的JavaScript和vue文件
eslint . --ext .js,.vue:这个命令告诉ESLint检查当前目录(.)及其子目录中的所有.js和.vue文件

 "lint": "eslint . --ext .js,.vue"

自动修复ESLint发现的一些问题,–fix会让ESLint尝试自动修复可以自动修复的问题

"lint": "eslint src --ext .js,.vue"

配置vite.config.js中的ESLint

在vie.config.js中引入vite-plugin-eslint,并在plugin中进行配置
在这里插入图片描述
在这里插入图片描述

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
// import vueDevTools from 'vite-plugin-vue-devtools';
import { viteVConsole } from 'vite-plugin-vconsole';
import path from 'path';
import postcssPxToRem from 'postcss-pxtorem';
import eslint from 'vite-plugin-eslint';// https://vite.dev/config/
export default defineConfig(({ mode }) => {// 根据当前工作目录中的 `mode` 加载 .env 文件const env = loadEnv(mode, process.cwd());const enableVConsole = env.VITE_USER_NODE_ENV !== 'production'; // 只有非生产环境启用const proxy = env.VITE_USER_NODE_ENV=== 'development' ? {'/api': {target: env.VITE_API_BASE_URL,changeOrigin: true,secure: false,ws: true,  // 支持 websocketrewrite: (path) => path.replace(/^\/api/, ''),onError: (err, req, res) => {console.log('proxy error', err);}}} : {'/': {target: 'https://xxx.xxxxxx.cn/',changeOrigin: true,ws: true,timeout: 300000},};return {plugins: [vue(),enableVConsole&&viteVConsole({entry: path.resolve('src/main.js'),enabled: true,config: {maxLogNumber: 1000,theme: 'dark'}}),eslint({fix: true,// 自动修复cache: false,// 缓存include: ['src/**/*.js', 'src/**/*.vue'],// 需要检查的文件exclude: ['node_modules', 'dist'],// node_modules和dist目录下的文件不检查}),// vueDevTools(),].filter(Boolean),resolve: {alias: {'@': path.resolve(__dirname, 'src')}},css: {preprocessorOptions: {less: {javascriptEnabled: true,additionalData: '@import "@/assets/styles/variables.less";'}},postcss: {plugins: [postcssPxToRem({// 配置在将px转化为rem时 1rem等于多少px(因为我们搭配使用了amfe-flexible插件 此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)rootValue: 75,propList: ['*'],selectorBlackList: [],replace: true,mediaQuery: false,minPixelValue: 0,exclude: /node_modules/i,atRules: true,inline: true})]}},server: {host: '0.0.0.0',port: 8008,proxy,//内网穿透,手机调试本地代码用allowedHosts: ['8eec-113-106-75-166.ngrok-free.app', // 添加你的ngrok URL// 如果需要,可以添加其他允许的主机'localhost', // 允许本地访问'127.0.0.1' // 允许本地访问],}};
});

关于 vite-plugin-eslint 和 eslint.config.js

eslint.config.js
是ESLint的核心配置文件,它定义了项目中使用的所有规则、环境设置、解析器选项等,通过这个文件,可以
定制化规则:指定哪些代码风格和质量相关的规则应该被应用到项目中,例如是否允许分号;
配置插件:ESLint支持通过插件来扩展其功能,比如支持新的语言特性或者添加额外的规则集;
设置环境:告诉ESLint代码将在哪个环境运行(浏览器、nodejs)
指定解析器: 默认情况下,ESLint使用express解析JavaScript代码,但是也可以选择Babel-ESLint或者其他的解析器来支持更复杂的语法结构
vite-plugin-eslint
vite-plugin-eslint是vite的插件,用于在开发过程中自动集成,用于定义项目的ESLint规则、环境、解析器,也就是说:
自动化检查:在启动vite开发服务器时自动进行代码质量检查,无需手动运行ESLint命令
即时反馈:当代码违反了ESLint规则时,可以在中断立即看到警告

区别与联系
区别:
功能定位不同:vite-plugin-eslint主要负责在Vite项目中集成ESLint,使其能够在开发和构建阶段自动检查代码;而 eslint.config.js则是一个配置文件,用来指定ESLint应该应用的具体规则和选项。
使用场景不同:vite-plugin-eslint侧重于集成和自动合检查过程,eslint.config.js侧重与定制化的设置ESLint的行为
联系:
它们都是为提高代码质量和一致性服务的,vite-plugin-eslint依赖于eslint.config.js中的配置来决定如何检查代码,换句话说,eslint.config.js提供了ESLint的规则和配置,而vite-plugin-eslint则负责在Vite环境中应用这些规则
所以,在一个使用vite的项目中,若要充分利用ESLint来提升代码质量,通常需要同时配置vite-plugin-eslint和eslint.config.js,前者保证ESLint能够无缝融入Vite开发体验中,后者则精准的控制了ESLint的具体行为。

配置Prettier

安装prettier

npm install prettier --save-dev

http://www.ppmy.cn/server/175910.html

相关文章

在1688平台上如何实现铺货和上传商品的自动化?

在1688平台上实现铺货和上传商品的自动化,可以通过以下几种方式来实现: 1. **使用1688开放平台API** 1688提供了开放平台API,允许开发者通过编程接口实现商品上传、库存管理、订单处理等操作。你可以通过以下步骤实现自动化: …

基于MPC8377的MCPU 3U机箱CPCI板卡

板卡简介: 本板为主控板(MCPU),主要负责逻辑控制、数据的处理、板卡的通信管理、系统安全保护切换以及数据存储等功能。 性能规格: 电源:DC5V CPU:MPC8377 核数:单核 32位 主频…

如何仅在conda中更新gcc版本

由于在使用deepspeed时产生报错:“DeepSpeedCPUAdam" object has no attribute "ds_opt_adam",报错原因是gcc版本过低。因此需要对gcc版本进行升级。 由于在服务器中无管理员权限,无法更新系统的gcc版本,因此提供…

【数据结构】如何解决二叉树在遍历查找前驱与后继的问题?线索二叉树来帮您……

线索二叉树的基本概念 导读一、线索二叉树的定义1.1 三叉链表1.2 线索二叉树的功能 二、线索二叉树的结点2.1 二叉树中的空指针数2.2 线索二叉树的结点结构 三、线索二叉树的存储结构3.1 线索与孩子的区别3.2 线索二叉树的空指针 结语 导读 大家好,很高兴又和大家见…

Hadoop集群组成

(一)Hadoop的组成 对普通用户来说, Hadoop就是一个东西,一个整体,它能给我们提供无限的磁盘用来保存文件,可以使用提供强大的计算能力。 在Hadoop3.X中,hadoop一共有三个组成部…

python拉取大视频导入deepseek大模型解决方案

使用Python拉取大视频并导入大模型,需要综合考虑数据获取、存储、处理和资源管理,确保高效稳定地处理大视频数据,同时充分利用大模型的性能,以下是分步方案及代码示例: --- 1. 分块下载大视频(避免内存溢出…

几种常见的激活函数解析

几种常见的激活函数解析 激活函数的用处常见激活函数Sigmoid图像函数导数优点缺点应用场景 Tanh图像函数导数优点缺点 relu图像函数导数优点缺点 LeaklyRelu图像函数导数优点缺点 PRelu图像函数导数优点缺点 swish图像函数导数优点缺点 激活函数的用处 在研究激活函数之前&…

代码随想录算法训练营第31天 | 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 代码随想录 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…