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

前端工程化(editorconfig+ESLint+Prettier+StyleLint+Husky、Commitlint)

前言

致谢:有来技术大大

通过学习有来技术大大的文章和结合自己的实践,写一篇笔记记录一下

所使用的工具:

  • ide项目风格(editorconfig)
  • 代码检查(ESLint)
  • 代码风格(Prettier)
  • 样式风格(StyleLint)
  • git提交规范(Husky、Commitlint)

一、ide项目规范

VSCode 搜索 EditorConfig for VS Code 插件并安装

集成editorconfig配置

作用:使项目代码风格保持一致
步骤:在项目中创建 .editorconfig 文件

# https://editorconfig.orgroot = true[*]   # 表示适用于所有文件
charset = utf-8     # 设置文件字符为utf-8
indent_style = space    # 缩进风格(tab | space)
indent_size = 2     # 缩进大小
end_of_line = lf    # 控制换行类型(lf | cr | crlf)
insert_final_newline = true     # 始终在文件末尾插入一个新行
trim_trailing_whitespace = true     # 去除行首的任意空白字符[*.md]  #表示仅 md 文件适用
insert_final_newline = false
trim_trailing_whitespace = false

二、代码规范

代码规范工具

  • ESLint
  • Prettier
  • StyleLint

1、集成ESLint

ESLint: 一个用于检查和修复 JavaScript 代码中问题的代码检测工具。它能够帮助你发现并修复 JavaScript 代码中的问题

ESLint 配置(.eslintrc.cjs)
#如果使用脚手架创建的项目集成了eslint,可忽略# 1、安装
npm i eslint -D# 2、生成配置
npx eslint --init

然后根据自己的需要选择配置,完成后项目中会生成 .eslintrc.js.eslintrc.cjs 文件,一下以 .eslintrc.cjs为例

module.exports = {root: true,env: {node: true,},extends: ["plugin:vue/essential","eslint:recommended","plugin:prettier/recommended",],parserOptions: {parser: "@babel/eslint-parser",},rules: {"no-console": process.env.NODE_ENV === "production" ? "warn" : "off","no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",},
};

在默认配置基础上需要修改解析器为 vue-eslint-parser ,不然在检测执行中出现 error Parsing error: '>' expected 的解析错误,修改 .eslintrc.cjs,最终文件放于最后

ESLint 忽略配置(.eslintignore)
dist
node_modules
public
.husky
.vscode
.idea
*.sh
*.mdsrc/assets.eslintrc.cjs
.prettierrc.cjs
.stylelintrc.cjs
ESLint 检测指令

package.json 添加 eslint 检测指令:

"scripts": {"lint:eslint": "eslint \"src/**/*.{vue,ts,js}\" --fix"
}
ESLint 检测和验证
# eslint检测
npm run lint:eslint

image.png

2、集成Prettier

prettier是一款强大的代码格式化工具,文档

安装依赖
npm install prettier -D

根目录创建配置文件.prettierrc.cjs 和格式化忽略配置文件.prettierignore

// 详细配置:https://www.prettier.cn/docs/options.html
module.exports = {// (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always)arrowParens: "always",// 开始标签的右尖括号是否跟随在最后一行属性末尾,默认falsebracketSameLine: false,// 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar})bracketSpacing: true,// 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto)embeddedLanguageFormatting: "auto",// 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css)htmlWhitespaceSensitivity: "css",// 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认falseinsertPragma: false,// 在 JSX 中使用单引号替代双引号,默认falsejsxSingleQuote: false,// 每行最多字符数量,超出换行(默认80)printWidth: 120,// 超出打印宽度 (always | never | preserve )proseWrap: "preserve",// 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;)quoteProps: "as-needed",// 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认falserequirePragma: false,// 结尾添加分号semi: true,// 使用单引号 (true:单引号;false:双引号)singleQuote: false,// 缩进空格数,默认2个空格tabWidth: 2,// 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号trailingComma: "es5",// 指定缩进方式,空格或tab,默认false,即使用空格useTabs: false,// vue 文件中是否缩进 <style> 和 <script> 标签,默认 falsevueIndentScriptAndStyle: false,
};
dist
node_modules
public
.husky
.vscode
.idea
*.sh
*.mdsrc/assets
prettier 格式化指令

package.json 添加 prettier 格式化指令:

"scripts": {"lint:prettier": "prettier --write \"**/*.{js,ts,json,css,less,scss,vue,html,md}\"" 
}
格式化和校验
# 执行命令进行 Prettier 代码格式化:
npm run lint:prettier

image.png

3、Stylelint CSS 检测

Stylelint 一个强大的 CSS linter(检查器),可帮助您避免错误并强制执行约定。官方网站: stylelint.io

注意官网明确指出 Stylelint 作为 CSS 代码规范检测而不作为代码格式化工具使用(Prettier 是更好的选择),新版本(15.0.0)为此废弃相关的 rules

安装依赖
npm install -D stylelint stylelint-config-standard stylelint-config-recommended-scss stylelint-config-recommended-vue postcss postcss-html postcss-scss stylelint-config-recess-order stylelint-config-html
依赖说明备注
stylelintstylelint 核心库stylelint
stylelint-config-standardStylelint 标准共享配置stylelint-config-standard 文档
stylelint-config-recommended-scss扩展 stylelint-config-recommended 共享配置并为 SCSS 配置其规则stylelint-config-recommended-scss 文档
stylelint-config-recommended-vue扩展 stylelint-config-recommended 共享配置并为 Vue 配置其规则stylelint-config-recommended-vue 文档
stylelint-config-recess-order提供优化样式顺序的配置CSS 书写顺序规范
stylelint-config-html共享 HTML (类似 HTML) 配置,捆绑 postcss-html 并对其进行配置stylelint-config-html 文档
postcss-html解析 HTML (类似 HTML) 的 PostCSS 语法postcss-html 文档
postcss-scssPostCSS 的 SCSS 解析器 postcss-scss 文档,支持 CSS 行类注释
Stylelint 配置

根目录新建 .stylelintrc.cjs 文件,配置如下:

module.exports = {// 继承推荐规范配置extends: ["stylelint-config-standard","stylelint-config-recommended-scss","stylelint-config-recommended-vue/scss","stylelint-config-html/vue","stylelint-config-recess-order",],// 指定不同文件对应的解析器overrides: [{files: ["**/*.{vue,html}"],customSyntax: "postcss-html",},{files: ["**/*.{css,scss}"],customSyntax: "postcss-scss",},],// 自定义规则rules: {// 允许 global 、export 、v-deep等伪类"selector-pseudo-class-no-unknown": [true,{ignorePseudoClasses: ["global", "export","v-deep", "deep"],},],},
};

根目录创建 .stylelintignore 文件,配置忽略文件如下:

dist
node_modules
public
.husky
.vscode
.idea
*.sh
*.mdsrc/assets
Stylelint 检测指令

package.json 添加 Stylelint 检测指令:

"scripts": {"lint:stylelint": "stylelint \"**/*.{css,scss,vue,html}\" --fix"
}

Stylelint检测和验证
执行以下命令:

npm run lint:stylelint

image.png

4、ESLint 和 Prettier 配置冲突解决方案

项目中同时配置了eslint和prettier,格式化检测时二者冲突

解决方案:vue官网配置

安装插件eslint-plugin-prettiereslint-config-prettier (在创建项目的时候,如果选择了prettier,这两个插件会自动安装)

npm install eslint-plugin-prettier eslint-config-prettier -D

配置 .eslintrc.cjs

  extends: [// 参考vuejs官方的eslint配置: https://eslint.vuejs.org/user-guide/#usage// 此处为vue2"plugin:vue/recommended",// 覆盖 ESLint 配置,确保 prettier 放在最后"prettier",]

vue3中使用了ts,格式化可能出现的问题: https://blog.csdn.net/wuyxinu/article/details/124104078

二、git提交规范

通过 Husky + Lint-staged + Commitlint + Commitizen + cz-git 来配置 Git 提交代码规范

1、Husky

官网: https://typicode.github.io/husky/

  • husky是一个npm包,支持监听所有的git hooks,安装后,可以很方便的在package.json配置git hook 脚本

核心内容是配置 Husky 的 pre-commitcommit-msg 两个钩子:

pre-commit:Husky + Lint-staged 整合实现 Git 提交前代码规范检测/格式化 (前提:ESlint + Prettier + Stylelint 代码统一规范

commit-msg: Husky + Commitlint + Commitizen + cz-git 整合实现生成规范化且高度自定义的 Git commit message

安装

分为自动安装和手动安装两种,推荐自动安装的方式

image.png

npx husky-init && npm install

image.png
如报上述错误,连接符号请自行在;&&之间替换,原因是PowerShell版本不同

image.png
自动安装会做三件事:

  1. 安装husky相关依赖(npm包)

image.png

  1. 在项目目录下创建 .husky 文件夹

image.png

  1. package.json文件中添加相应脚本

image.png

2、lint-staged

lint-staged 是一个在 git add 到暂存区的文件运行 linters (ESLint/Prettier/StyleLint) 的工具,避免在 git commit 提交时在整个项目执行。

安装
npm install -D lint-staged
格式化配置
  "lint-staged": {"*.{js,ts}": ["eslint --fix","prettier --write"],"*.{cjs,json}": ["prettier --write"],"*.{vue,html}": ["eslint --fix","prettier --write","stylelint --fix"],"*.{scss,css}": ["stylelint --fix","prettier --write"],"*.md": ["prettier --write"]},
添加lint-staged命令
"scripts": {"lint:lint-staged": "lint-staged"
}
修改提交前钩子命令

根目录 .husky 目录下 pre-commit 文件中的 npm test 修改为 npm run lint:lint-staged

image.png

Git提交代码检测

image.png
发现报错,提示没有发现lint-staged相关配置,在package.json加上lint-staged配置即可

image.png

3、Commitlint

commitlint 是一个 git commit 校验约束工具,检查您的提交消息是否符合 Conventional commit format

Commitlint安装

参考官方文档

npm install -g @commitlint/cli @commitlint/config-conventional
Commitlint 配置

根目录创建 commitlint.config.cjs 配置文件,示例配置:commitlint/config-conventional

module.exports = {// 继承的规则extends: ["@commitlint/config-conventional"],// @see: https://commitlint.js.org/#/reference-rulesrules: {"subject-case": [0], // subject大小写不做校验// 类型枚举,git提交type必须是以下类型"type-enum": [2,"always",['feat', // 新增功能'fix', // 修复缺陷'docs', // 文档变更'style', // 代码格式(不影响功能,例如空格、分号等格式修正)'refactor', // 代码重构(不包括 bug 修复、功能新增)'perf', // 性能优化'test', // 添加疏漏测试或已有测试改动'build', // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)'ci', // 修改 CI 配置、脚本'revert', // 回滚 commit'chore', // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)],],},
};
添加提交信息校验钩子

执行下面命令生成 commint-msg 钩子用于 git 提交信息校验,命令来自:@commitlint/README.md

npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"

image.png

Commitizen & cz-git
  • commitizen: 基于Node.js的 git commit 命令行工具,辅助生成标准化规范化的 commit message。–官方文档

  • cz-git: 一款工程性更强,轻量级,高度自定义,标准输出格式的 commitizen 适配器。–官方文档

Commitizen & cz-git 安装
npm install -D commitizen cz-git
cz-git 配置
  "config": {"commitizen": {"path": "node_modules/cz-git"}},

cz-git 与 commitlint 进行联动给予校验信息,所以可以编写于 commitlint 配置文件之中(⇒ 配置模板)。

// commitlint.config.cjs
module.exports = {// 继承的规则extends: ['@commitlint/config-conventional'],// 自定义规则rules: {// @see https://commitlint.js.org/#/reference-rules// 提交类型枚举,git提交type必须是以下类型'type-enum': [2,'always',['feat', // 新增功能'fix', // 修复缺陷'docs', // 文档变更'style', // 代码格式(不影响功能,例如空格、分号等格式修正)'refactor', // 代码重构(不包括 bug 修复、功能新增)'perf', // 性能优化'test', // 添加疏漏测试或已有测试改动'build', // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)'ci', // 修改 CI 配置、脚本'revert', // 回滚 commit'chore', // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)],],'subject-case': [0], // subject大小写不做校验},prompt: {messages: {type: '选择你要提交的类型 :',scope: '选择一个提交范围(可选):',customScope: '请输入自定义的提交范围 :',subject: '填写简短精炼的变更描述 :\n',body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',footerPrefixesSelect: '选择关联issue前缀(可选):',customFooterPrefix: '输入自定义issue前缀 :',footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',generatingByAI: '正在通过 AI 生成你的提交简短描述...',generatedSelectByAI: '选择一个 AI 生成的简短描述:',confirmCommit: '是否提交或修改commit ?',},// prettier-ignoretypes: [{ value: "feat", name: "特性:     ✨  新增功能", emoji: ":sparkles:" },{ value: "fix", name: "修复:     🐛  修复缺陷", emoji: ":bug:" },{ value: "docs", name: "文档:     📝  文档变更", emoji: ":memo:" },{ value: "style", name: "格式:     🌈  代码格式(不影响功能,例如空格、分号等格式修正)", emoji: ":lipstick:" },{ value: "refactor", name: "重构:     🔄  代码重构(不包括 bug 修复、功能新增)", emoji: ":recycle:" },{ value: "perf", name: "性能:     🚀  性能优化", emoji: ":zap:" },{ value: "test", name: "测试:     🧪  添加疏漏测试或已有测试改动", emoji: ":white_check_mark:" },{ value: "build", name: "构建:     📦️  构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:" },{ value: "ci", name: "集成:     ⚙️  修改 CI 配置、脚本", emoji: ":ferris_wheel:" },{ value: "revert", name: "回退:     ↩️  回滚 commit", emoji: ":rewind:" },{ value: "chore", name: "其他:     🛠️  对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:" },],useEmoji: true,emojiAlign: 'center',useAI: false,aiNumber: 1,themeColorCode: '',scopes: [],allowCustomScopes: true,allowEmptyScopes: true,customScopesAlign: 'bottom',customScopesAlias: 'custom',emptyScopesAlias: 'empty',upperCaseSubject: false,markBreakingChangeMode: false,allowBreakingChanges: ['feat', 'fix'],breaklineNumber: 100,breaklineChar: '|',skipQuestions: [],issuePrefixes: [{ value: 'closed', name: 'closed:   ISSUES has been processed' },],customIssuePrefixAlign: 'top',emptyIssuePrefixAlias: 'skip',customIssuePrefixAlias: 'custom',allowCustomIssuePrefix: true,allowEmptyIssuePrefix: true,confirmColorize: true,maxHeaderLength: Infinity,maxSubjectLength: Infinity,minSubjectLength: 0,scopeOverrides: undefined,defaultBody: '',defaultIssues: '',defaultScope: '',defaultSubject: '',},
};

添加提交指令

"scripts": { "commit": "git-cz" 
}

cz-git 验证

执行git提交流程,根据出现的询问交互,一步步完成commit msg 信息

#1、暂存变更
git add .#2、提交并粗发git-cz
npm run commit#3、推送
git push

相关文章:

前端工程化(editorconfig+ESLint+Prettier+StyleLint+Husky、Commitlint)

前言 致谢&#xff1a;有来技术大大 通过学习有来技术大大的文章和结合自己的实践&#xff0c;写一篇笔记记录一下 所使用的工具&#xff1a; ide项目风格(editorconfig)代码检查(ESLint)代码风格(Prettier)样式风格(StyleLint)git提交规范(Husky、Commitlint) 一、ide项目…...

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试&#xff0c;但为了提升自己的技术&#xff0c;多学习一点还是没有坏处的&#xff0c;废话不多说了&#xff0c;目前主流的webUI测试框架应该还是selenium&#xff0c;考虑到可维护性、拓展性、复用性等&#xff0c;我们采用PO模式去写我…...

【排序算法】详解冒泡排序及其多种优化稳定性分析

文章目录 算法原理细节分析优化1优化2算法复杂度分析稳定性分析总结 算法原理 冒泡排序(Bubble Sort) 就是从序列中的第一个元素开始&#xff0c;依次对相邻的两个元素进行比较&#xff0c;如果前一个元素大于后一个元素则交换它们的位置。如果前一个元素小于或等于后一个元素…...

使用 Go 和 Wails 构建跨平台桌面应用程序

由于多种原因&#xff0c;Electron 曾经&#xff08;并且仍然&#xff09;大受欢迎。首先&#xff0c;其跨平台功能使开发人员能够从单个代码库支持 Linux、Windows 和 macOS。最重要的是&#xff0c;它对于熟悉 Javascript 的开发人员来说有一个精简的学习曲线。 尽管它有其缺…...

花2个月时间学习,面华为测开岗要30k,面试官竟说:你不是在搞笑。。。

背景介绍 计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是…...

【Python学习笔记】字符串

1. 字符串定义 可以用双引号 、 单三引号、双三引号&#xff0c;下面的定义都是正确的 "你好" 你好 """你好"""其中三引号可以 直接写内容有多行 的字符串。如下 letter 刘总&#xff1a;您好&#xff01;您发的货我们已经收到&am…...

【AUTOSAR中断管理】TC3XX中断系统介绍

摘要 这段文本主要介绍了AURIX TC3XX的中断系统(Interrupt Router,简称IR)以及中断注册的过程以及举例说明中断机制。 AURIX TC3XX 中断系统(Interrupt Router)介绍 流程图描述中断路由器(IR)处理服务请求并与服务提供者交互。 中断系统的作用是将service request进行…...

Unity实现摄像机向屏幕中间发射射线射击物体

1.创建一个准星放在屏幕中间 外部找个PNG透明图&#xff0c;拖到Unity文件夹&#xff0c;右上角改成精灵sprite2d 2.添加到UI画布 3.写脚本 首先&#xff0c;我们需要引入一些 "工具"&#xff0c;就像我们在玩游戏时要先下载游戏客户端一样。这里的 "工具&quo…...

测试时数据增广(TTA)与mmdetection3d中的实现

1. 测试时数据增广 测试时数据增广&#xff08;TTA&#xff09;在测试时使用数据增广技术获取同一数据的多个“变体”&#xff0c;使用同一网络在这些“变体”以及原始数据上进行推断&#xff0c;最后整合所有结果作为该原始数据最终的预测结果。 TTA类似于集成学习&#xff0c…...

深入探索BP神经网络【简单原理、实际应用和Python示例】

人工神经网络&#xff08;Artificial Neural Networks&#xff09;是一种受到生物神经网络启发的机器学习模型&#xff0c;它的应用范围广泛&#xff0c;包括图像识别、语音识别、自然语言处理等领域。其中&#xff0c;BP神经网络&#xff08;Backpropagation Neural Network&a…...

【LVGL】SquareLine Studio入门基础操作

1.SquareLine Studio基础 在这篇文章中将介绍SquareLine Studio的基础操作、解释如何加载一个项目、布局结构。    启动软件后,可以加载之前的项目、创建项目、加载一个示例。    这里以打开示例audio_mixer为例,可以双击该项目打开或者选中该项目点击右下角的【创建】按…...

【单片机】19-TFT彩屏

一、背景知识--显示器 1.什么是TFT &#xff08;1&#xff09;LCD显示器的构成&#xff1a;液晶面板驱动器【电压驱动】控制器【逻辑控制】 &#xff08;2&#xff09;液晶面板大致分为&#xff1a;TN&#xff0c;TFT&#xff0c;IPS等 &#xff08;3&#xff09;驱动器是跟随…...

高质量!推荐一些免费自学网站

大家好&#xff0c;我是 jonssonyan 说到自学网站&#xff0c;大家第一印象肯定是”菜鸟教程“、”w3school“、B 站大学。这些教程当然非常的好&#xff0c;而且适合入门学习&#xff0c;但是存在一些缺点&#xff0c;第一&#xff0c;知识点比较分散&#xff0c;没有一个整体…...

Linux之open/close/read/write/lseek记录

一、文件权限 这里不做过多描述&#xff0c;只是简单的记录&#xff0c;因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息 drwxrwxrwx 1 root root 0 Oct 10 17:06 open -rwxrwxrwx 1 root roo…...

3D调研-摄像头

参考资料&#xff1a; 来源1&#xff1a;https://leap2.ultraleap.com/leap-motion-controller-2 来源2&#xff1a; Gemini 2 _双目结构光相机_机器人感知-奥比中光官网 来源3&#xff1a; 国内外深度相机大盘点&#xff0c;仅用于学习科普&#xff01;--机器视觉网 来源4&…...

光耦合器继电器与传统继电器:哪种最适合您的项目?

在电子和电气工程领域&#xff0c;继电器的选择可以显着影响项目的性能和安全性。两种常见类型的继电器是光耦合器继电器和传统机电继电器。每个都有其优点和缺点&#xff0c;因此选择过程对于项目的成功结果至关重要。 光耦合器继电器&#xff1a;基础知识 光耦合器继电器&…...

分享关于职场心态

1.解决问题而不是解释原因 2.秉承工匠思维而不是激情思维 什么是工匠思维&#xff1f; 工匠思维&#xff08;The craftsman mindset&#xff09;对待职业生涯的一种方式&#xff1b;是以产出为中心的职业观&#xff0c;关注自己给世界&#xff08;工作&#xff09;带来的价值…...

OK3568 UBUNTU 安装使用I2C-TOOLS

1. 安装 sudo apt-get update sudo apt-get install i2c-tools 使用I2Ctools 参考&#xff1a;https://blog.csdn.net/anyuliuxing/article/details/106382827 i2c-tools 是一组用于在Linux系统中进行I2C&#xff08;Inter-Integrated Circuit&#xff09;总线设备操作和调试…...

mysql面试题53:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录 可以按照以下步骤进行: 确保…...

Docker服务更新与发现

一&#xff0c;docker-consul简介 这是一个基于分布式的服务发现和管理工具&#xff0c;它具有快速构建分布式框架&#xff0c;提供服务发现和服务治理等特点。同时consul还提供了可靠的保证&#xff0c;多数据中心和强大的API以满足高可用&#xff0c;分布式环境下的需求。 …...

【2023集创赛】安谋科技杯二等奖作品: 智能体感游戏机

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;安谋科技杯二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼…...

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

Codeforces Round 903 (Div. 3) C(矩形旋转之后对应的坐标)

题目链接&#xff1a;Codeforces Round 903 (Div. 3) C 题目&#xff1a; 思想&#xff1a; 旋转之后对应的坐标&#xff1a; &#xff08;i&#xff0c;j&#xff09;&#xff08;n1-j&#xff0c;i&#xff09;&#xff08;n1-i&#xff0c;n1-j&#xff09;&#xff08;j…...

月薪过万的Java面试

​ 写了一个月&#xff0c;篇幅太长了&#xff0c;都写不下了&#xff0c;被逼无奈&#xff0c;只能拆分 面试题&#xff1a; HashMap底层实现原理&#xff0c;红黑树&#xff0c;B树&#xff0c;B树的结构原理&#xff0c;volatile关键字&#xff0c;CAS&#xff08;比较与…...

html进阶语法

html进阶 列表、表格、表单 目标&#xff1a;掌握嵌套关系标签的写法&#xff0c;使用列表标签布局网页 01-列表 作用&#xff1a;布局内容排列整齐的区域。 列表分类&#xff1a;无序列表、有序列表、定义列表。 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的…...

博客系统(java,MySQL,HTML)

项目展示&#xff1a; 1.输入 http://127.0.0.1:8080/blog_system/login.html 即可进入登录页面 2.输入正确的用户名和密码后进入博客列表页 要是用户名或密码输入错误&#xff0c;会弹出错误提示框 3.点击查看全文&#xff0c;可以进入博客详情页查看详细信息 4.点击写博客&a…...

Android Studio SDKGradleJDK等工具的正确使用

AS在安装使用过程中可能会占用C盘大量空间&#xff0c;对于C盘容量本来就小的人来说非常不友好&#xff0c;其实我们可以自定义安装路径 SDK默认安装位置 各种版本和NDK也会安装到这个路径 SDK版本选择性安装 通过选择图示的按钮&#xff0c;可以显示SDK的版本详情&#xff0…...

利用Python提取将Excel/PDF文件数据

使用Python来创建一个接口&#xff0c;用于接收Excel文件资源链接&#xff0c;下载文件并执行指定的操作&#xff0c;然后返回处理后的数据。以下是一个基本的示例&#xff0c;展示如何使用Flask来创建这样的接口。请注意&#xff0c;这是一个简化的示例&#xff0c;您可能需要…...

纯 CSS 实现瀑布流布局的方法

纯 CSS 实现瀑布流布局的方法 这种方式兼容性不是很好&#xff0c;全部支持需要些时间&#xff0c;但是目前是可以使用 css 写出来的 display: grid; grid-template-columns: repeat(4, 1fr); grid-gap: 10px; grid-template-rows: masonry;全部的 css .container {display:…...

输入法显示到语言栏_状态栏

设置–时间和语言–语言–最右侧"相关设置"中的"拼写、键入和键盘设置" 最下方的"高级键盘设置"–“使用桌面语言栏(如果可用)” 点击"语言栏选项" 接下来就是不同输入法的设置了 搜狗输入法:右键输入法选择"隐藏状态栏"–…...