vite+vue3+ts项目搭建流程 (pnpm, eslint, prettier, stylint, husky,commitlint )

vite+vue3+ts项目搭建

  • 项目搭建
    • 项目目录结构
  • 项目配置
    • 自动打开项目
    • eslint
      • ①vue3环境代码校验插件
      • ②修改.eslintrc.cjs配置文件
      • ③.eslintignore忽略文件
      • ④运行脚本
    • prettier
      • ①安装依赖包
      • ②.prettierrc添加规则
      • ③.prettierignore忽略文件
      • ④运行脚本
    • stylint
      • ①.stylelintrc.cjs配置文件
      • ②.stylelintignore忽略文件
      • 【问题】'module' is not defined
      • ③运行脚本
    • husky
      • 【问题】.git can't be found
    • commitlint
      • 【问题】说明
    • 统一包管理器工具

项目搭建

  • vite创建
node -v
pnpm -vpnpm create vite //使用 PNPM,我用的是pnpm
npm init vite@latest //使用 NPM
pnpm create vite //使用 Yarn

在这里插入图片描述

  • 安装依赖+运行项目
 cd vite_vue3_adminpnpm installpnpm run dev

在这里插入图片描述

项目目录结构

在开发期间 Vite 是一个服务器,而 index.html 是该 Vite 项目的入口文件。

│  ├─node_modules # 项目依赖
│  │
│  ├─public # 静态资源目录
│  │      vite.svg 
│  │
│  ├─src
│  │  │  App.vue # 入口vue文件
│  │  │  main.ts # 入口文件
│  │  │  style.css
│  │  │  vite-env.d.ts # vite环境变量声明文件
│  │  │
│  │  ├─assets # 资源文件目录
│  │  │      vue.svg
│  │  │
│  │  └─components # 组件文件目录
│  │         HelloWorld.vue
│  │
│  │ .gitignore
│  │ index.html # Vite项目的入口文件
│  │ package.json # 项目或者模块包的描述
│  │              # npm install 命令会根据这个文件下载所有依赖模块。
│  │ pnpm-lock.yaml # 锁定项目所依赖的包的版本
│  │ README.md
│  │ tsconfig.json # tsconfig配置文件
│  │ tsconfig.app.json 
│  │ tsconfig.node.json 
│  │ vite.config.ts # vite配置文件

项目配置

自动打开项目

package.json

"scripts": {"dev": "vite --open","build": "vue-tsc -b && vite build","preview": "vite preview"},

eslint

  • 【步骤一】首先安装eslint
pnpm i eslint -D
  • 【步骤二】生成配置文件:.eslint.cjs
npx eslint --init # 命令初始化eslint

在这里插入图片描述

  • 【步骤三】生成eslint.config.js 而不是 eslintrc.cjs

官网https://www.tkcnn.com/eslint/configuring/configuration-files-new.html#%E9%85%8D%E7%BD%AE%E5%AF%B9%E8%B1%A1

// eslint.config.js 
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import pluginVue from "eslint-plugin-vue";export default [{files: ["**/*.{js,mjs,cjs,ts,vue}"]},{languageOptions: { globals: globals.browser }},pluginJs.configs.recommended,...tseslint.configs.recommended,...pluginVue.configs["flat/essential"],
];
  • 硅谷甄选项目中生成 eslintrc.cjs,也来学习一下:
module.exports = {//运行环境"env": { "browser": true,//浏览器端工作"es2021": true,//es2021 校验ES语法},//规则继承"extends": [ //全部规则默认是关闭的,这个配置项开启推荐规则,推荐规则参照文档//比如:函数不能重名、对象不能出现重复key"eslint:recommended", // 开启eslint推荐规则//vue3语法规则 检测vue"plugin:vue/vue3-essential",//ts语法规则 检测ts"plugin:@typescript-eslint/recommended"],//要为特定类型的文件指定处理器//比如校验markdown,要自己添加"overrides": [],//指定解析器:解析器//Esprima 默认解析器//Babel-ESLint babel解析器//@typescript-eslint/parser ts解析器"parser": "@typescript-eslint/parser",//指定解析器选项"parserOptions": {"ecmaVersion": "latest",//校验ECMA最新版本"sourceType": "module"//设置为"script"(默认),或者"module"代码在ECMAScript模块中},//ESLint支持使用第三方插件。在使用插件之前,您必须使用npm安装它//该eslint-plugin-前缀可以从插件名称被省略"plugins": ["vue", //检测vue语法的插件"@typescript-eslint" // 检测TS语法的插件],//eslint规则"rules": {}
}

①vue3环境代码校验插件

安装指令

pnpm install -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin-node @babel/eslint-parser

②修改.eslintrc.cjs配置文件

我的 eslint.config.js 没有修改,按照原样不动是可以直接检测的。

在这里插入图片描述

③.eslintignore忽略文件

.eslintignore忽略文件(已被废除)

在这里插入图片描述

④运行脚本

package.json新增两个运行脚本

"scripts": {"lint": "eslint src", // 执行lint的时候,检测src中的代码"fix": "eslint src --fix", //自动修补
}

prettier

官网:https://prettier.nodejs.cn/docs/en/plugins.htm

有了eslint,为什么还要有prettier?eslint针对的是javascript,他是一个检测工具,包含js语法以及少部分格式问题,在eslint看来,语法对了就能保证代码正常运行,格式问题属于其次;

而prettier属于格式化工具,它看不惯格式不统一,所以它就把eslint没干好的事接着干,另外,prettier支持包含js在内的多种语言。

总结 eslint和prettier 一个保证js代码质量,一个保证代码美观。

eslint和prettier共同使用参考:https://github.com/prettier/eslint-config-prettier

①安装依赖包

pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier

②.prettierrc添加规则

官网 https://prettier.io/docs/en/install.html

在项目的根目录下【手动】创建 《.prettierrc》

{"singleQuote": true,   // 要求字符串都是单引号"semi": false,         // 语句后面设置不加分号  semi是分号"bracketSpacing": true, //在对象前后添加空格-eg: { foo: bar }"htmlWhitespaceSensitivity": "ignore", //对HTML全局空白不敏感"endOfLine": "auto", //结束行形式"trailingComma": "all", //多行时尽可能打印尾随逗号"tabWidth": 2 // 缩进
}

③.prettierignore忽略文件

在项目的根目录下【手动】创建 《.prettierignore》忽略文件

/dist/*
/html/*
.local
/node_modules/**         这些文件不需要格式化
**/*.svg
**/*.sh
/public/*

④运行脚本

npx prettier . --check

官网 https://prettier.io/docs/en/install.html

在这里插入图片描述

stylint

stylelint为css的lint工具。可格式化css代码,检查css语法错误与不合理的写法,指定css书写顺序等。

我们的项目中使用scss作为预处理器,安装以下依赖:

pnpm add sass sass-loader stylelint postcss postcss-scss postcss-html stylelint-config-prettier stylelint-config-recess-order stylelint-config-recommended-scss stylelint-config-standard stylelint-config-standard-vue stylelint-scss stylelint-order stylelint-config-standard-scss -D

①.stylelintrc.cjs配置文件

module.exports = {extends: ['stylelint-config-standard', // 配置stylelint拓展插件'stylelint-config-html/vue', // 配置 vue 中 template 样式格式化'stylelint-config-standard-scss', // 配置stylelint scss插件'stylelint-config-recommended-vue/scss', // 配置 vue 中 scss 样式格式化'stylelint-config-recess-order', // 配置stylelint css属性书写顺序插件,'stylelint-config-prettier', // 配置stylelint和prettier兼容],overrides: [{files: ['**/*.(scss|css|vue|html)'],customSyntax: 'postcss-scss',},{files: ['**/*.(html|vue)'],customSyntax: 'postcss-html',},],ignoreFiles: ['**/*.js','**/*.jsx','**/*.tsx','**/*.ts','**/*.json','**/*.md','**/*.yaml',],/*** null  => 关闭该规则* always => 必须*/rules: {'value-keyword-case': null, // 在 css 中使用 v-bind,不报错'no-descending-specificity': null, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器'function-url-quotes': 'always', // 要求或禁止 URL 的引号 "always(必须加上引号)"|"never(没有引号)"'no-empty-source': null, // 关闭禁止空源码'selector-class-pattern': null, // 关闭强制选择器类名的格式'property-no-unknown': null, // 禁止未知的属性(true 为不允许)'block-opening-brace-space-before': 'always', //大括号之前必须有一个空格或不能有空白符'value-no-vendor-prefix': null, // 关闭 属性值前缀 --webkit-box'property-no-vendor-prefix': null, // 关闭 属性前缀 -webkit-mask'selector-pseudo-class-no-unknown': [// 不允许未知的选择器true,{ignorePseudoClasses: ['global', 'v-deep', 'deep'], // 忽略属性,修改element默认样式的时候能使用到},],},
}

②.stylelintignore忽略文件

/node_modules/*
/dist/*
/html/*
/public/*

【问题】‘module’ is not defined

.stylelintrc.cjs 文件的第一行出现了 'module' is not defined.(no-undef)报错

解决方法:掘金文章https://juejin.cn/s/eslint%20%27module%27%20is%20not%20defined.(no-undef)

在这里插入图片描述

在 JavaScript 中,如果要使用模块系统,需要使用 import 和 export 语句。如果在没有 import 或 export 的情况下使用了 module 变量,ESLint 就会报 ‘module’ is not defined.(no-undef) 的错误。

为了解决这个问题,可以尝试检查你的代码,确保你使用了正确的 import 和 export 语句。如果你的代码中没有使用模块系统,可以在 .eslintrc 文件中的 env 属性中加入 “node”: true,以便告诉 ESLint 在解析代码时使用 Node.js 环境。

③运行脚本

"scripts": {"format": "prettier --write \"./**/*.{html,vue,ts,js,json,md}\"","lint:eslint": "eslint src/**/*.{ts,vue} --cache --fix","lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
}

pnpm run format的时候,会把代码直接格式化

husky

在上面我们已经集成好了我们代码校验工具,但是需要每次手动的去执行命令才会格式化我们的代码。如果有人没有格式化就提交了远程仓库中,那这个规范就没什么用。所以我们需要强制让开发人员按照代码规范来提交

要做到这件事情,就需要利用husky在代码提交之前触发 git hook (git在客户端的钩子),然后执行pnpm run format来自动的格式化我们的代码。

安装husky

pnpm install -D husky

执行

npx husky-init

git 会在根目录下生成个一个.husky目录,在这个目录下面会有一个pre-commit文件,这个文件里面的命令在我们执行git commit的时候就会执行。我们在.husky/pre-commit文件添加命令:pnpm run format。意思是,在提交到远程仓库之前格式化一下代码。

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm run format

当我们对代码进行commit操作的时候,就会执行命令,对代码进行格式化,然后再提交。

【问题】.git can’t be found

在这里插入图片描述

Error: .git can’t be found (see https://typicode.github.io/husky/#/?id=custom-directory)
at install (C:\Users\24541\AppData\Local\npm-cache_npx\1ab9c0f68ac2536e\node_modules\husky\lib\index.js:23:15)
at Object. (C:\Users\24541\AppData\Local\npm-cache_npx\1ab9c0f68ac2536e\node_modules\husky-init\lib\bin.js:16:21)

是因为在当前目录下没有 .git

commitlint

对于我们的git commit信息,也是有统一规范的,不能随便写,要让每个人都按照统一的标准来执行,我们可以利用commitlint来实现。

安装包

pnpm add @commitlint/config-conventional @commitlint/cli -D

添加配置文件,新建commitlint.config.cjs,然后添加下面的代码:

module.exports = {extends: ['@commitlint/config-conventional'],// 校验规则rules: {'type-enum': [2,'always',['feat','fix','docs','style','refactor','perf','test','chore','revert','build',],],'type-case': [0],'type-empty': [0],'scope-empty': [0],'scope-case': [0],'subject-full-stop': [0, 'never'],'subject-case': [0, 'never'],'header-max-length': [0, 'always', 72],},
}

package.json中配置scripts命令

# 在scrips中添加下面的代码
{
"scripts": {"commitlint": "commitlint --config commitlint.config.cjs -e -V"},
}

配置结束,现在当我们填写commit信息的时候,前面就需要带着下面的subject

'feat',//新特性、新功能
'fix',//修改bug
'docs',//文档修改
'style',//代码格式修改, 注意不是 css 修改
'refactor',//代码重构
'perf',//优化相关,比如提升性能、体验
'test',//测试用例修改
'chore',//其他修改, 比如改变构建流程、或者增加依赖库、工具等
'revert',//回滚到上一个版本
'build',//编译相关的修改,例如发布版本、对项目构建或者依赖的改动

配置husky

npx husky add .husky/commit-msg 

在生成的commit-msg文件中添加下面的命令

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm commitlint

当我们 commit 提交信息时,就不能再随意写了,必须是 git commit -m ‘fix: xxx’ 符合类型的才可以,需要注意的是类型的后面需要用英文的 :,并且冒号后面是需要空一格的,这个是不能省略的

【问题】说明

因为在 git init 的时候,我没有在当前目录下创建仓库,而是在父文件夹创建了,因此 husky和commitlint 没有实际用在我的项目中

统一包管理器工具

团队开发项目的时候,需要统一包管理器工具,因为不同包管理器工具下载同一个依赖,可能版本不一样,

导致项目出现bug问题,因此包管理器工具需要统一管理。

在根目录创建scripts/preinstall.js文件,添加下面的内容

if (!/pnpm/.test(process.env.npm_execpath || '')) {console.warn(`\u001b[33mThis repository must using pnpm as the package manager ` +` for scripts to work properly.\u001b[39m\n`,)process.exit(1)
}

配置命令

"scripts": {"preinstall": "node ./scripts/preinstall.js"
}

当我们使用npm或者yarn来安装包的时候,就会报错了。原理就是在install的时候会触发preinstall(npm提供的生命周期钩子)这个文件里面的代码。

  • 此时再用npm/yarn安装就是不行的

在这里插入图片描述

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

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

相关文章

前端自动化

前端自动化的内容 自动化代码检查自动化测试自动化构建自动化部署自动化文档 前端自动化的最佳实践

基于改进YOLOv5的安全帽检测算法 | 引入Ghost卷积 + 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之WIoU

前言:Hello大家好,我是小哥谈。为了解决建筑工地、隧道、煤矿等施工场景中现有安全帽检测算法对于小目标、密集目标以及复杂环境下的检测精度低的问题,设计实现了一种基于YOLOv5的改进目标检测算法,记为YOLOv5-GBCW。首先使用Ghos…

心理健康测试系统设计

心理健康测试系统设计需要综合考虑多个方面,以确保系统的准确性、易用性和有效性。以下是一个心理健康测试系统设计方案: 一、设计目标 准确性:确保测试结果能够准确反映被测者的心理健康状况。 易用性:设计简洁明了的界面和操作…

C语言 | Leetcode C语言题解之第166题分数到小数

题目: 题解: struct HashMapNode {int key;int val;UT_hash_handle hh; };struct HashMapNode* hashMap NULL;int hashMapAdd(int key, int val) {struct HashMapNode* node;HASH_FIND_INT(hashMap, &key, node);if(node ! NULL){return node->…

openai停止中国的api服务,但是性能相当的阿里云免费提供迁移

🎥 开场白: “大家好,我是你们的科技小助手,今天给大家带来一个重要的信息更新!” 🌐 引入话题: “最近,许多朋友可能已经听说了,OpenAI决定停止对中国的服务。但别担心…

fiddler抓https包

1,安装fiddler省略 2,下载证书步骤:tools-options-https 点击确认,点击OK,点击是 把证书安装到谷歌浏览器上步骤:点击谷歌浏览器右上角的设置,在搜索框中搜索证书,点击“证书管理”…

从0搭建一个vue项目,不使用脚手架从html到vue

前言 从最开始学习web网页开始,搭建一个网页只需要创建一个html文件对其进行编写dom标签语言即可;后来分离了html,css和js,搭建一个网页开始需要文件夹,文件夹包含了这3类文件以及静态文件,图片&#xff0c…

备战秋招day4

算法 242. 有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {int[] count new int[26];for(int i 0;i<s.length();i){count[s.charAt(i)-a];}for(int i 0;i<t.length();i){count[t.charAt(i)-a]--;if(count[t.charAt(i)-a]<0){r…

【CSS】 简单理解一下CSS 3D变换

CSS 3D变换是Web开发中一项强大的技术&#xff0c;它允许开发者在网页上创建和展示三维图形和动画。以下是关于CSS 3D变换的深入浅出介绍&#xff1a; 一、3D变换基础 坐标轴&#xff1a; X轴&#xff1a;水平向右&#xff0c;正方向为右&#xff0c;负方向为左。Y轴&#xff…

【会议征稿】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议&#xff08;ACIIBD 2024&#xff09;将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域&#xff0c; 广泛邀请国内外知名专家学者&#xff0c;共同探讨相关学科领域的最新发展…

26.高级特性(上)

目录 一、不安全的Rust二、不安全的超能力2.1 概念2.2 解引用裸指针2.3 调用不安全的函数或方法2.3 创建不安全代码的安全抽象2.4 使用extern函数调用外部代码2.5 访问或修改可变静态变量2.6 实现不安全trait2.7 访问联合体中的字段 三、高级trait3.1 关联类型在trait定义中指定…

【昇思初学入门】第七天打卡-模型训练

训练模型 学习心得 构建数据集。这通常包括训练集、验证集&#xff08;可选&#xff09;和测试集。训练集用于训练模型&#xff0c;验证集用于调整超参数和监控过拟合&#xff0c;测试集用于评估模型的泛化能力。 &#xff08;mindspore提供数据集https://www.mindspore.cn/d…

使用Python和NLTK进行NLP分析的高级指南

在本文中&#xff0c;将利用数据集来比较和分析自然语言。 本文涵盖的基本构建块是&#xff1a; WordNet和同义词集相似度比较树和树岸命名实体识别 WordNet和同义词集 WordNet是NLTK中的大型词汇数据库语料库。WordNet维护与名词&#xff0c;动词&#xff0c;形容词&#…

Unity 弧形图片位置和背景裁剪

目录 关键说明 Unity 设置如下 代码如下 生成和部分数值生成 角度转向量 计算背景范围 关键说明 效果图如下 来自红警ol游戏内的截图 思路&#xff1a;确定中心点为圆的中心点 然后 计算每个的弧度和距离 Unity 设置如下 没什么可以说的主要是背景图设置 代码如下 …

DM达梦数据库函数分析(与mysql对应函数区别及用法分析)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝💝💝如有需要请大家订阅我的专栏【数据库系列】哟!我会定期更新相关系列的文章 💝💝💝关注!关注!!请…

攻克PS之路——Day1(A1-A8)

#暑假到了&#xff0c;作为可能是最后一个快乐的暑假&#xff0c;我打算学点技能来傍身&#xff0c;首先&#xff0c;开始PS之旅 这个帖子作为我跟着B站up主学习PS的记录吧&#xff0c;希望我可以坚持下去&#xff01; 学习的链接在这里&#xff1a;A02-PS软件安装&#xff0…

Hadoop 面试题(十)

1. 简述下列关于Hadoop命令中&#xff0c;命令执行成功返回0&#xff0c;执行失败返回-1&#xff0c;下列命令返回-1的是 &#xff1f; A&#xff1a;hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2 B&#xff1a;hdfs dfs -mv hdfs:///testData file:///tmp/testData …

基于SSM+VUE的网上订餐系统(带1w+文档)

基于SSMVUE的网上订餐系统(带1w文档) 网上订餐系统的数据库里面存储的各种动态信息&#xff0c;也为上层管理人员作出重大决策提供了大量的事实依据。总之&#xff0c;网上订餐系统是一款可以真正提升管理者的办公效率的软件系统。 项目简介 基于SSMVUE的网上订餐系统(带1w文档…

亚马逊云科技官方活动:一个月拿下助理架构师SAA+云从业者考试认证(送半价折扣券)

为了帮助大家考取AWS SAA和AWS云从业者认证&#xff0c;小李哥争取到了大量考试半价50%折扣券&#xff0c;使用折扣券考试最多可省75刀(545元人民币)。 领取折扣券需要加入云师兄必过班群&#xff0c;在群中免费领取。目前必过班群招募到了超过200名小伙伴&#xff0c;名额有限…