
export function render() {
document.getElementById("app")!.innerHTML = "main";
}
render();
// import.meta.hot上面的所有API就是来源于HMRContext这个类
if (import.meta.hot) {
import.meta.hot.accept((updatedModule) => updatedModule.render());
}但是 只编译不校验,所以需要安装 typescript
// package.json
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build"
},ESLinteslint 是一个插件化并且可配置的 JavaScript 语法规则和代码风格的检查工具
因为 ESlint 是默认支持解析 JavaScript 的,以及有内置一些规则,所以我们只需启用相对于的规则名称就可以了
安装
pnpm install eslint @eslint/js globals -D{
// --ext .ts,.tsx,vue:这个选项指定了 ESLint 检查的文件类型
// --no-error-on-unmatched-pattern:如果没有找到符合条件的文件,它不会抛出错误,脚本仍然可以顺利执行
"lint": "eslint --ext .ts,.tsx,vue src/\*\* --no-error-on-unmatched-pattern --quiet",
// --fix:这个选项告诉 ESLint 尝试自动修复一些问题
"lint:fix": "eslint --ext .ts,.tsx,vue src/** --no-error-on-unmatched-pattern --quiet --fix"
}对于 ESLint
8.x 及以上版本,配置文件推荐使用 eslint.config.js,而不是 .eslintrc.js。ESLint
9.x 及以上版本不再支持此 .eslintignore 文件
eslint.config.js
// 用ESlint提供的现成的规则集,要用到@eslint/js这个依赖包
import eslint from "@eslint/js";
// 启用隐藏的全局变量规则
import globals from "globals";
import tseslint from "typescript-eslint";
//
import eslintPluginVue from "eslint-plugin-vue";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
export default [
{
ignores: ["node_modules", "dist", "public"],
},
// 用ESlint提供的现成的规则集
eslint.configs.recommended,
/** ts推荐配置 */
...tseslint.configs.recommended,
// 我们使用了eslintPluginVue.configs['flat/recommended']作为vue的推荐规则配置
...eslintPluginVue.configs["flat/recommended"],
/**
* javascript 规则
*/
{
files: ["**/*.{js,mjs,cjs,vue}"],
rules: {
"no-console": "error",
},
},
/**
* 配置全局变量
*/
{
languageOptions: {
globals: {
...globals.browser,
/** 追加一些其他自定义全局规则 */
wx: true,
},
},
},
/**
* vue 规则
*/
{
files: ["**/*.vue"],
languageOptions: {
parserOptions: {
/** typescript项目需要用到这个 */
parser: tseslint.parser,
ecmaVersion: "latest",
/** 允许在.vue 文件中使用 JSX */
ecmaFeatures: {
jsx: true,
},
},
},
rules: {
// 在这里追加 vue 规则
"vue/no-mutating-props": [
"error",
{
shallowOnly: true,
},
],
},
},
/**
* typescript 规则
*/
{
files: ["**/*.{ts,tsx,vue}"],
rules: {},
},
/**
* prettier 配置
* 会合并根目录下的prettier.config.js 文件
* @see https://prettier.io/docs/en/options
*/
eslintPluginPrettierRecommended,
];编辑器中的 ESlint
VSCode 中的 ESlint,本质是可以在你编写代码时,实时看到代码中不符合项目 ESlint 规则配置的错误,比如这样:
ESLint 主要解决的是代码质量问题 prettier 主要解决的是代码风格问题
1. Prettier 如何运作
prettier 扩展会读取项目根目录中的.prettierrc、.prettierrc.js 之类的配置文件,然后你在 vscode 中用 prettier 执行格式化时,会根据配置文件的要求对代码进行格式化。
那么问题来着,格式化后的结果,有时跟 ESlint 的要求是不一样的,比如 ESlint 要求这个属性要换行,prettier 要求这个属性不换行。好了,你代码是格式化的漂漂亮亮了,但是 ESlint 不乐意啊,它就给你报红。怎么办呢?
2.解决 Prettier 跟 ESlint 冲突
为了解决两者的冲突,我们要使用另一个 ESlint 插件 eslint-plugin-prettier。eslint-plugin-prettier 这个插件不仅提供文件解析,代码 fix,也顺带提供了一些规则配置。
比如它会把跟 prettier 冲突的 ESlint 规则给 off 掉,并使用自己的规则,也就是说,二选一,让你选 prettier。为什么是 prettier 呢,prettier 其实只是提供代码风格的规范,也是目前主流的一个风格规范,那我们就跟着主流呗。其他代码逻辑的规范,就交给 ESlint。
// 安装
pnpm add eslint-plugin-prettier -Dimport eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
/**
* prettier 配置
* 会合并根目录下的prettier.config.js 文件
* @see https://prettier.io/docs/en/options
*/
eslintPluginPrettierRecommended,这里仅仅是添加一句 eslint-plugin-prettier/recommended,非常简单对吧,它的作用是 off 与它冲突的 ESlint 规则,并且启用自己的 Recommended 规则,并且它会自动合并 prettier.config.js 配置,所以我们还需要在根目录创建一份 prettier.config.js,配置如下,可根据自己的需求调整配置
prettier.config.js
/**
* @type {import('prettier').Config}
* @see https://www.prettier.cn/docs/options.html
*/
export default {
trailingComma: "all", // 在对象或数组最后一个元素后面加逗号(在ES5中加尾逗号)
singleQuote: true,// 使用单引号而不是双引号
semi: false,// 在语句末尾添加分号
printWidth: 80, // 每行代码的最大长度
arrowParens: "always",// 箭头函数只有一个参数的时候,也需要括号
proseWrap: "always",
endOfLine: "lf",
experimentalTernaries: false,
tabWidth: 2,
useTabs: false,
quoteProps: "consistent",
jsxSingleQuote: false,
bracketSpacing: true,
bracketSameLine: false,
jsxBracketSameLine: false,
vueIndentScriptAndStyle: false,
singleAttributePerLine: false,// 多行HTML元素属性强制单行显示
};常用hooks
1.pre-commit:在提交代码前触发(适合运行代码检查、格式化)
2.commit-msg:在提交信息写完后触发(适合校验提交信息格式)
3.pre-push:在推送代码前触发(适合运行测试)
为什么需要husky**
但是默认情况下,git钩子存储在项目的 .git/hooks 目录中,但它们是本地化的(不纳入版本控制),且需要手动配置,就是.git 目录是 git内部管理仓库的核心目录,git本身不会跟踪这个目录的内容。也就是说,如果你在 .git/hooks 中添加了钩子脚本,这些脚本,不会提交到代码仓库,其他团队成员拉取代码时,不会自动获取你的钩子配置,仅对当前本地仓库生效,每个开发者需要在自己的电脑上单独配置,无法共享。为了让团队共享这些钩子配置,我们需要引入一个好用的工具 ——
husky。
husky作用
什么是husky?husky 可以帮我们在 git钩子配置纳入项目版本控制,团队共享同一套规则,自动化触发流程,在 git操作的关键节点自动执行脚本(如代码检查、提交校验,强制规范执行:防止开发者绕过代码检查或提交规范
npm install husky --save-dev
npx husky inithusky流程
当项目其他成员克隆我们的代码后运行 npm install 时,"prepare" 会被触发,husky
init 会运行在.husky 文件中 加入钩子脚本 lint-staged
什么是 lint-staged?顾名思义,这个工具专门用于检查 git暂存区的文件,也就是说,它只会对你通过 git
add 命令添加到暂存区的文件进行 lint 检查。
这样,每次提交时,husky 会自动触发 lint-staged,只对暂存区的文件进行 prettier 和 eslint 检查
commitizen
commitizen 是什么呢?简单来说,它是用来规范 git提交信息的工具。大家有没有遇到过这样的情景,在提交代码时,写下类似 git
commit -m "更新了一点" 或 git commit -m
"更新了一些" 这样的信息,或者同事提交信息的时候这样子提交,格式混乱且无法清楚表明修改了什么内容?这时候,commitizen 就能帮我们规范这些提交信息,让提交变得更加有规则和易于理解。
安装 commitizen
npm install commitizen -Dcz-conventional-changelog
我们需要安装适配器 cz-conventional-changelog,并初始化它,cz-conventional-changelog 是 commitizen 的“规则引擎”,它封装了 Angular 的提交规范,成为一个通用的工具,帮助我们规范提交信息的格式。
@commitlint/cli
@commitlint/cli 是一个命令行工具,用于校验 Git 提交信息是否符合规范。它通常与 Husky 和 lint-staged 配合使用,以在提交代码前对提交信息进行校验,从而确保提交信息的格式和内容符合项目规范和约定。
@commitlint/config-conventional
Git-cz 一款工程性更强,轻量级,高度自定义,标准输出格式的 commitizen 适配器
1.全局样式 2.局部样式
3.CSS Modules
<style module>
.link {
color: red;
}
</style>4. 预处理器
// vite.config.ts
export default defineConfig({
resolve: {
alias: {
'@': resolve('src'),
},
},
plugins: [vue()],
css: {
preprocessorOptions: {
scss: {
additionalData: '@use "@/styles/theme.scss" as *";',
},
less: {
additionalData: '@use "@/styles/theme.scss" as *";',
},
},
},
})$color: green;6 PostCSS
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。