基于vite和vue3、 eslint、prettier、stylelint、husky规范
前言
在现代的前端开发中,代码规范非常重要。它可以提高团队的协作效率,减少代码错误,使代码更易于维护。为了实现代码规范化,我们可以使用一些工具来辅助我们的开发流程,包括eslint、prettier、stylelint、husky,如果没有这些工具去辅助、约束我们团队开发,那么团队内,百花齐放,各写各的,各用各的规范格式、那么每次提交代码的时候,由于每个人的规范格式不一样,那么不同人提交的代码,在对比的时候,就会出现,不必要的改动显示,不利于代码检视,代码维护、代码统一规范等,所以需要上诉工具帮助我们代码开发,下面逐一介绍。
Eslint
ESLint是一个非常流行的JavaScript代码静态分析工具,它可以帮助检测和修复代码中的错误和不规范的写法。它提供了丰富的规则配置,可以根据项目的需要进行定制,如果需要详细的教程可点击Eslint跳转官网查看。
eslint在项目中的配置使用步骤
安装eslint
npm init @eslint/config
安装完毕之后,会在项目根目录看到 eslint.config.js 配置文件,其内容是
import globals from "globals";
import pluginJs from "@eslint/js";
import pluginVue from "eslint-plugin-vue";export default [{files: ["**/*.{js,mjs,cjs,vue}"]}, // 校验文件类型,如果明确我们的项目中没有 mjs 和 cjs 文件,可以删除掉这两个后缀{languageOptions: { globals: globals.browser }}, // 全局变量pluginJs.configs.recommended, // eslint-plugin-js 的推荐配置...pluginVue.configs["flat/essential"], // 表示使用Vue.js的扁平化基本配置
]
我们可以像下面一样添加一些自定义的规则,来让我们的项目更加规范
import globals from "globals";
import pluginJs from "@eslint/js";
import pluginVue from "eslint-plugin-vue";export default [{files: ["**/*.{js,mjs,cjs,vue}"]}, // 校验文件类型,如果明确我们的项目中没有 mjs 和 cjs 文件,可以删除掉这两个后缀{languageOptions: { globals: globals.browser }}, // 全局变量pluginJs.configs.recommended, // eslint-plugin-js 的推荐配置, 具体有啥推荐,可以查看官方文档 https://zh-hans.eslint.org/docs/latest/rules/...pluginVue.configs["flat/essential"], // 表示使用Vue.js的扁平化基本配置/** 自定义规则 */{rules: {// 代码风格"indent": ["error", 2], // 缩进2个空格"quotes": ["error", "single"], // 字符串使用单引号"semi": ["error", "always"], // 语句结尾使用分号"space-before-function-paren": ["error", "never"], // 函数定义时括号前面不加空格// 变量声明"no-var": "error", // 禁止使用 var"no-unused-vars": "error", // 禁止出现未使用的变量// 最佳实践"no-console": "error", // 禁止使用 console"no-debugger": "error", // 禁止使用 debugger"no-alert": "error", // 禁止使用 alert// 错误处理"handle-callback-err": "error", // 要求回调函数中有错误处理// Vue"vue/html-indent": ["error", 2], // vue文件缩进2个空格}}
];
有了这些规则,自然就得用起来,我们可以使用下面的命令
npx eslint . // 校验当前目录下的所有文件
npm eslint file.js // 校验 file.js 文件
如何让eslint 规则,在我们编写代码的时候就校验,而不是在控制台输入命令后才校验呢
那就得在vscode 插件市场中找到 eslint 插件然后安装
安装完我们就打开vscode设置,启用eslint即可
如果我们的代码不符合校验规则,就会出现红线提示了像下面这样
接下来就是,设置如何在保存的时候,自动正确格式化我们的代码了,那就需要用到下面介绍的工具prettier了
配置 eslint 忽略
只需要在配置文件里面进行类似下面相应的配置即可,这是现在最新版的eslint 9.11.0
Prettier
Prettier是一个代码格式化工具,它可以自动调整代码的缩进、换行、引号等格式,使代码风格保持一致。与ESLint不同,Prettier主要关注代码的格式问题,而不是语法或逻辑错误。
安装prettier
npm install --save-dev --save-exact prettier
创建一个配置文件.prettier及忽略文件 .prettierignore
接下来是配置 prettier 可点击这里前往官网查看详细配置,下面的我一些配置
// 注意实际上,文件中不能有注释代码,记得去除
{"experimentalTernaries": true, // 使用实验性的三元表达式"singleQuote": true, // 使用单引号"semi": true, // 使用分号"trailingComma": "none", // 不使用尾随逗号"arrowParens": "avoid", // 箭头函数参数只有一个时不使用括号"printWidth": 80, // 每行最大字符数"tabWidth": 2, // 缩进字符数"useTabs": false, // 使用空格缩进"bracketSpacing": true, // 对象字面量的大括号前后使用空格"jsxBracketSameLine": false, // 在jsx中,将>多行JSX元素的放在另起一行"vueIndentScriptAndStyle": true, // 在Vue文件中,缩进<template>、<script>和<style>标签内的代码"endOfLine": "auto", // 自动检测换行符"quoteProps": "as-needed", // 对象属性仅在必要时使用引号"bracketSameLine": false, // 将多行HTML (HTML、JSX、Vue、Angular)元素的>单独放在下一行(不适用于自闭元素)"vueIndentScriptAndStyle": false, // 在Vue文件中,缩进<script>和<style>标签内的代码
}
1、接下来在vscode 的设置里面 找到代码格式化设置,设置为使用 prettier格式化代码
2、然后再找到 保存自动格式化代码设置
3、安装vscode 扩展 eslint 与 prettier
如果发现做了上述操作之后,保存代码还是没有自动格式化代码,那就把vscode的 eslint、prettier 扩展插件 卸载了重新安装,然后重启vscode,就可以解决了,点击保存后,发现还是有eslint 校验出来的红线,我理解这就是eslint 与 prettier 的冲突规则
解决 eslint 与 prettier 冲突
然后解决eslint(9.11.0) 与 prettier(3.3.3)冲突的常用方法就是使用 下面两个包
- eslint-config-prettier 会关闭ESLint中有关代码格式化的配置。
- eslint-plugin-prettier 把Prettier配置成ESLint的一个插件,让其当做一个linter规则来运行
作为开发依赖安装
npm i eslint-config-prettier eslint-plugin-prettier -D
然后在eslint.config.js 增加下面的配置即可
extends: ['plugin:prettier/recommended'],
在这个地方增加配置
Stylelint
Stylelint是一个专门用于检测CSS代码规范的工具。它可以检查CSS文件中的语法错误、命名规范、属性顺序等问题。Stylelint也提供了大量的规则配置,可以根据项目需要进行定制。
安装 Stylelint
// 如果是 scss/sass 则后一个插件的后缀对应改一下接口 例如 stylelint-config-standard-scss
npm install --save-dev stylelint stylelint-config-standard-less
我是使用less写样式的,所以安装上述依赖即可,如果是其他的预处理器,则安装对应的即可,安装完之后,就需要到vscode,安装对应的插件了
安装 vscode 插件
Git 规范流程
Husky是一个git钩子工具,它可以在代码提交前或提交后执行一些自定义的脚本。我们可以使用Husky来集成各种代码规范检查工具,例如在提交代码前自动运行ESLint、Prettier和Stylelint,以确保提交的代码符合规范、校验提交信息是否符合规范等
需要安装的依赖如下
husky | 操作git钩子的工具 |
lint-staged | 在提交前进行eslint校验,并使用prettier格式化暂存区的代码 |
@commitlint/cli | 校验提交信息 |
@@commitlint/config-conventional | Angular 的提交规范 |
commitizen | 生成标准化的commit message |
cz-git | 轻量级、高度自定义。输出标准格式的commitize 适配器 |
下面逐一安装使用
安装husky
npm install husky -D
然后再package.json 中添加如下配置
"prepare": "husky install"
npm run prepare 一下 就会在项目根目录生成一个.husky文件夹
安装 lint-staged
npm install lint-staged -D
然后在根目录创建一个lint-staged.config.js 配置如下
export default {'*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],'{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': ['prettier --write--parser json'],'package.json': ['prettier --write'],'*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix'],'*.{scss,less,styl,html}': ['stylelint --fix', 'prettier --write'],'*.md': ['prettier --write']
};
安装 commitlint 校验提交信息
npm i @commitlint/cli @commitlint/config-conventional -D
安装commitizen、cz-git
npm install commitizen cz-git -D
然后在 package.json中添加如下配置
"config": {"commitizen": {"path": "node_modules/cz-git"}
}
然后在根目录创建一个 commitlint.config.js 文件配置如下
// @see: https://cz-git.qbenben.com/zh/guide
/** @type {import('cz-git').UserConfig} */module.exports = {ignores: [commit => commit === "init"],extends: ["@commitlint/config-conventional"],rules: {// @see: https://commitlint.js.org/#/reference-rules"body-leading-blank": [2, "always"],"footer-leading-blank": [1, "always"],"header-max-length": [2, "always", 108],"subject-empty": [2, "never"],"type-empty": [2, "never"],"subject-case": [0],"type-enum": [2,"always",["feat","fix","docs","style","refactor","perf","test","build","ci","chore","revert","wip","workflow","types","release"]]},prompt: {messages: {type: "选择你要提交的类型 :",scope: "选择一个提交范围(可选):",customScope: "请输入自定义的提交范围 :",subject: "填写简短精炼的变更描述 :\n",body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',footerPrefixsSelect: "选择关联issue前缀(可选):",customFooterPrefixs: "输入自定义issue前缀 :",footer: "列举关联issue (可选) 例如: #31, #I3244 :\n",confirmCommit: "是否提交或修改commit ?"},types: [{ value: "feat: 特性", name: "特性: 🚀 新增功能", emoji: "🚀" },{ value: "fix: 修复", name: "修复: 🧩 修复缺陷", emoji: "🧩" },{ value: "docs: 文档", name: "文档: 📚 文档变更", emoji: "📚" },{ value: "style: 格式", name: "格式: 🎨 代码格式(不影响功能,例如空格、分号等格式修正)", emoji: "🎨" },{ value: "refactor: 重构", name: "重构: ♻️ 代码重构(不包括 bug 修复、功能新增)", emoji: "♻️" },{ value: "perf: 性能", name: "性能: ⚡️ 性能优化", emoji: "⚡️" },{ value: "test: 测试", name: "测试: ✅ 添加疏漏测试或已有测试改动", emoji: "✅" },{ value: "chore: 构建", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)", emoji: "📦️" },{ value: "ci: 集成", name: "集成: 🎡 修改 CI 配置、脚本", emoji: "🎡" },{ value: "revert: 回退", name: "回退: ⏪️ 回滚 commit", emoji: "⏪️" },{ value: "build: 打包", name: "打包: 🔨 项目打包发布", emoji: "🔨" }],useEmoji: true,themeColorCode: "",scopes: [],allowCustomScopes: true,allowEmptyScopes: true,customScopesAlign: "bottom",customScopesAlias: "custom",emptyScopesAlias: "empty",upperCaseSubject: false,allowBreakingChanges: ["feat", "fix"],breaklineNumber: 100,breaklineChar: "|",skipQuestions: [],issuePrefixs: [{ value: "closed", name: "closed: ISSUES has been processed" }],customIssuePrefixsAlign: "top",emptyIssuePrefixsAlias: "skip",customIssuePrefixsAlias: "custom",allowCustomIssuePrefixs: true,allowEmptyIssuePrefixs: true,confirmColorize: true,maxHeaderLength: Infinity,maxSubjectLength: Infinity,minSubjectLength: 0,scopeOverrides: undefined,defaultBody: "",defaultIssues: "",defaultScope: "",defaultSubject: ""}
};
再然后再package.json 的script中添加如下命令
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src","lint:prettier": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"","lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/","lint:lint-staged": "lint-staged","prepare": "husky install","release": "standard-version","commit": "git status && git add -A && git-cz"
最后我们就可以通过 运行 npm run commit 进行代码提交了,就会出现下面的场景,然后选择对一个的特性即可
然后假如 git commit -m "xx"则汇报下面的错误,无法完成提交,这样就可以达到,提交信息统一规范的目的,但是假如是通过vscode提交的还是校验不到,目前找不到解决办法
总结
综上所述,通过使用ESLint、Prettier、Stylelint和Husky,我们可以实现代码的静态分析、格式化和风格检查,并在团队中推行统一的代码规范。这将帮助我们提高代码质量,提高开发效率,降低维护成本。
相关文章:
基于vite和vue3、 eslint、prettier、stylelint、husky规范
前言 在现代的前端开发中,代码规范非常重要。它可以提高团队的协作效率,减少代码错误,使代码更易于维护。为了实现代码规范化,我们可以使用一些工具来辅助我们的开发流程,包括eslint、prettier、stylelint、husky&am…...
git push到远程怎么回退
git push到远程服务器想继续修改,你必须要回退然后在此提交。而且需要保留本地的修改文件。 下面给你一些git命令,回退很简单。 按照下面的流程操作就行: 1.查看提交历史 首先,使用git log命令查看提交历史。可以使用以下命令显…...
Web保存状态的手段(Application的使用)
Application 在Java Web开发中,ServletContext(通常称为application)是一个非常重要的接口,它代表了Web应用程序的上下文。每个Web应用都有其自己的ServletContext,当Web应用被加载到Servlet容器时创建,并…...
高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(一)框架
【转载】理解图优化,一步步带你看懂g2o框架 文章来源:理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种方法叫“图优化”,以前学习算法的时候还有一个优化方法…...
Flutter Row组件实战案例
In this section, we’ll continue our exploration by combining the Row and Container widgets to create more complex layouts. Let’s dive in! 在本节中,我们将继续探索,结合“Row”和“Container”小部件来创建更复杂的布局。让我们开始吧! Sc…...
【ubuntu20.04】【ROS Noetic】【ROS安装】【Website may be down.】【gpg: 找不到有效的 OpenPGP 数据。】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、登入www.ros.org1.Setup your sources.list2.Set up your keys中间出了点问题 gpg: 找不到有效的 OpenPGP 数据。4.Installation下载安装ros5.环境参数的配…...
Python开发必备,这些黑科技库你get到了吗
大家好,今天我要为大家推荐一些非常强大和实用的Python库,相信无论是Python新手还是老司机,都能从中受益,提升你的Python开发技能。那就一起来看看吧! 1.Requests: 简单好用的HTTP请求库 第一个要介绍的是Requests库。它是Python中最流行的HTTP客户端库之一,大大简化了网络请…...
sublime text 常用快捷键
sublimetext常用快捷键 CtrlShiftP:打开命令面板 CtrlP:搜索项目中的文件 CtrlG:跳转到第几行 CtrlW:关闭当前打开文件 CtrlShiftW:关闭所有打开文件 CtrlShiftV:粘贴并格式化 CtrlD:选择单词&a…...
Kubernetes(K8S) + Harbor + Ingress 部署 SpringBoot + Vue 前后端分离项目
文章目录 1、环境准备2、搭建 K8S3、搭建 Harbor4、搭建 MySQL5、构建 SpringBoot 项目镜像6、构建 Vue.js 项目镜像7、部署项目7.1、配置 NameSpace7.2、配置 Deployment、Service7.3、配置 Ingress-Nginx7.4、访问测试 1、环境准备 本次整体项目部署使用的是阿里云ECS服务器…...
【iOS】知乎日报第一周总结
知乎日报第一周总结 文章目录 知乎日报第一周总结前言网络异步导致视图无法加载加载网络上的图片实现一个上拉刷新的效果左上角的时间初步实现了点击cell进入网页小结 前言 笔者在本周算是正式开始写项目了,本周主要是大致完成了主页的内容,大致完成了主…...
Springboot整合spring-boot-starter-data-elasticsearch
前言 <font style"color:rgb(36, 41, 47);">spring-boot-starter-data-elasticsearch</font> 是 Spring Boot 提供的一个起始依赖,旨在简化与 Elasticsearch 交互的开发过程。它集成了 Spring Data Elasticsearch,提供了一套完整…...
【大模型系列】mPLUG-Owl3(2024.08)
Paper: https://arxiv.org/pdf/2408.04840Github: https://github.com/X-PLUG/mPLUG-OwlHuggingFace:https://huggingface.co/mPLUG/mPLUG-Owl3-7B-240728Author: Jiabo Ye et al. 阿里巴巴 文章目录 0 总结(省流版)1 模型结构1.1 Cross-attention Based Achitectur…...
从0到1学习node.js(express模块)
文章目录 Express框架1、初体验express2、什么是路由3、路由的使用3、获取请求参数4、电商项目商品详情场景配置路由占位符规则5、小练习,根据id参数返回对应歌手信息6、express和原生http模块设置响应体的一些方法7、其他响应设置8、express中间件8.1、什么是中间件…...
MambaVision
核心速览 研究背景 研究问题 :这篇文章提出了一种新的混合Mamba-Transformer骨干网络,称为MambaVision,专为视 觉应用量身定制。研究的核心问题是如何有效地结合Mamba的状态空间模型(SSM)和Transf ormer的自注意力机制…...
MySQLDBA修炼之道-开发篇(二)
四、开发进阶 1. 范式和反范式 范式是数据库规范化的一个手段,是数据库设计中的一系列原理和技术,用于减少数据库中的数据冗余,并增进数据的一致性。 范式 1.1 第一范式 第一范式是指数据库表的每一列(属性)都是不可…...
前端必备的环境搭建
一、nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置) 参考地址:nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 说明: 1)关于nodejs目录不显示&a…...
SpringCloud笔记
什么是降级熔断?为什么要进行熔断? 熔断降级是一种分布式系统的保护机制,用于应对服务不稳定或不可用的情况。 熔断是指当某个服务的调用失败次数或异常比例达到一定阈值时,自动切断对该服务的调用,让请求快速失败&…...
优秀的程序员思考数据结构
原文地址:https://read.engineerscodex.com/p/good-programmers-worry-about-data 我最近在这篇很棒的 Stack Overflow 文章中看到了 Linus Torvalds(Linux 和 Git 的创建者)的一句话。(这篇文章回顾了那篇文章中的许多引述。 它…...
「C/C++」C/C++标准库之#include<cstdlib>通用工具库
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
Oracle视频基础1.1.3练习
1.1.3 需求: 完整格式查看所有用户进程里的oracle后台进程 查看物理网卡,虚拟网卡的ip地址 ps -ef | grep oracle /sbin/ifconfig要以完整格式查看所有用户进程中的 Oracle 后台进程,并查看物理和虚拟网卡的 IP 地址,可以使用以下…...
python项目实战——多协程下载美女图片
协程 文章目录 协程协程的优劣势什么是IO密集型任务特点示例与 CPU 密集型任务的对比处理 I/O 密集型任务的方式总结 创建并使用协程asyncio模块 创建协程函数运行协程函数asyncio.run(main())aiohttp模块调用aiohttp模块步骤 aiofiles————协程异步函数遇到的问题一 await …...
基于.NET 8.0,C#中Microsoft.Office.Interop.Excel来操作office365的excel
开发环境: Visual Studio 2022 office365 项目模板:WPF应用程序 框架:.NET 8.0 依赖:Microsoft.Office.Interop.Excel 注意: 1.使用Microsoft.Office.Interop.Excel库时,服务器或电脑里面必须安装得…...
使用无线方式连接Android设备进行调试的两种方法
1.使用配对码配对设备方式 手机(或者平板等安卓设备)和电脑需连接在同一WiFi 下;保证 SDK 为最新版本(adb --version ≥ 30.0.0); step1.手机启用开发者选项和无线调试模式(会提示确认ÿ…...
Valgrind的使用
Valgrind 是一个强大的开源工具,用于检测程序中的内存错误、内存泄漏以及线程问题。它广泛应用于 C/C++ 等需要手动管理内存的编程语言中。以下内容将详细介绍 Valgrind 的安装、基本使用方法、常用命令及其输出结果的解析。 1. 什么是 Valgrind? Valgrind 是一个用于内存调…...
微信小程序瀑布流实现,瀑布流长度不均等解决方法
这是一开始实现的瀑布流,将数据分为奇数列和偶数列 <view class"content-left"><block wx:for"{{list}}" wx:key"list"><template isitem-data data{{...item}} wx:if"{{index % 2 0}}"></template&…...
Notepad++通过自定义语言实现日志按照不同级别高亮
借助Notepad的自定义语言可以实现日志的按照不同级别的高亮; 参考: https://blog.csdn.net/commshare/article/details/131208656 在此基础上做了一点修改效果如下: xml文件: <NotepadPlus><UserLang name"Ansibl…...
2024年四川省大学生程序设计竞赛 补题记录
文章目录 Problem A. 逆序对染色(思维树状数组)Problem B. 连接召唤(贪心)Problem E. L 型覆盖检查器(模拟)Problem F. 小球进洞:平面版(几何)Problem G. 函数查询Proble…...
17_事件的处理
目录 绑定事件与解绑事件优化事件的绑定和解绑方式处理不同事件类型的绑定处理同一事件类型多个事件处理函数事件冒泡与更新时机问题 绑定事件与解绑事件 既然要处理事件,那么首先面临的问题是如何在 vnode 中描述这个事件,在 vnode.props 中࿰…...
1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)
相同点: (1)传递区间 队列、二值信号量、计数型信号量均可用在任务与任务,任务与中断之间进行消息传递 (2) 传递方式 创建队列--发送队列--接受队列 创建二值信号量--发送二值信号量--接受二值信号量 创建计…...
数据库设计与范式及其应用
数据库设计是数据库管理系统(DBMS)中的核心环节,良好的数据库设计不仅可以提高数据存取的效率,还能增强数据的可维护性和一致性。范式(Normalization)是一种设计原则,用于减少数据冗余和提高数据…...
东莞企业网站建设价格/企业网络营销策略分析案例
关于cmake的安装,CMakeLists.txt的语法规则,CMakeLists.txt的各种配置选项等复杂而专业的知识,限于本人能力,这里不再说明演示使用glibc2.0库一 项目目录laolanglaolang-Lenovo-G470:~/code/cmake/eclipse/HelloCMake$ tree.├──…...
永久网站空间/搜索引擎环境优化
openjudge 百练 2757:最长上升子序列 总时间限制: 2000ms内存限制: 65536kB描述一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2,…...
中小企业网站建设公司/百度做个人简介多少钱
作者 | 银川回民二小点文末“在看”,推荐给朋友导语:当大规模的在线教育铺开,区域教育的决策者急需对当下的实施情况进行把脉,以便做出更加科学的应对措施。一份成熟问卷设计,在此时显得尤为关键,为此&…...
营销型企业网站建设 广义的空间/seo短视频发布页
本文章为作者渗透测试自学系列文章,所有内容仅作为个人学习实验使用,请勿用于实战环境。 文章目录 搭建vulhub环境开启heartbleed容器探测漏洞漏洞复现受影响的版本附容器基本操作搭建vulhub环境 参见https://blog.csdn.net/weixin_42172261/article/details/119004158 开启h…...
好用的免费建站网站/企业网络营销顾问
前言 俗话说“生于忧患,死于安乐”,其实大部分中年危机,就是在安乐中产生的。 有的人或许会反驳,“照你这么说,我还必须奋斗了,不奋斗就要死,难道选择安逸的生活就不对吗?我就没有…...
广州网站 制作信科便宜/百度助手app下载安装
1 GitHub与code.csdn.net Git这个项目管理软件如今是如日中天,特别是在GitHub等公共免费git项目服务器的大力支持下,无论是开源还是私有项目越来越多地采用git进行项目管理了。GitHub是全球最稳定安全的项目托管平台,但是对国人来说有以下几点…...