vscode+eslint

Eslint

ESLint 是一个插件化的 JavaScript 代码质量和风格检查工具,它可以帮助开发者发现代码中的潜在错误、不一致的编码风格以及不符合最佳实践的代码。ESLint 的设计目标是完全可配置的,开发者可以根据自己的需求来定制规则。以下是 ESLint 的一些主要特点和使用方法:

主要特点

  • 完全可配置:ESLint 的所有规则都是可配置的,开发者可以根据自己的编码风格和项目需求来启用、禁用或修改规则。
  • 插件支持:ESLint 支持插件,开发者可以创建自定义的插件来扩展 ESLint 的功能。
  • 集成性:ESLint 可以与各种开发工具和构建系统(如 Webpack、Gulp、Grunt 等)集成,方便在开发过程中自动检查代码。
  • 支持多种 JavaScript 语法:ESLint 支持 ES6+、TypeScript、React 等多种 JavaScript 语法和框架。
  • 可扩展性:ESLint 的规则和配置可以共享,开发者可以创建和使用共享的配置文件(如 ESLint 配置包),以在不同的项目中保持一致的代码风格。

使用方法

安装 ESLint

  • 全局安装
    1
    npm install -g eslint
  • 项目本地安装
    1
    npm install eslint --save-dev

初始化 ESLint 配置

  • 在项目根目录下运行以下命令,根据提示选择配置选项:
    1
    npx eslint --init
  • 该命令会生成一个 .eslintrc 配置文件,其中包含了选定的规则和设置。

配置 ESLint

  • 配置文件:ESLint 的配置文件通常命名为 .eslintrc.js.eslintrc.json,可以在其中定义规则、环境、插件等。
  • 规则配置:在配置文件中,可以启用或禁用规则,也可以为规则设置不同的错误级别(如 offwarnerror)。
  • 环境配置:指定代码运行的环境,如 browsernode 等,以启用相应的全局变量和内置对象。
  • 插件配置:加载和配置插件,以扩展 ESLint 的功能。

运行 ESLint

  • 检查代码
    1
    npx eslint yourfile.js
  • 自动修复
    1
    npx eslint yourfile.js --fix

插件推荐

  • eslint-plugin-react:用于检查 React 代码的规则。
  • eslint-plugin-vue:用于检查 Vue 代码的规则。
  • eslint-plugin-import:用于检查模块导入的规则。
  • eslint-plugin-promise:用于检查 Promise 代码的规则。

配置共享

  • eslint-config-airbnb:Airbnb 的共享 ESLint 配置,适用于 React 和 Node.js 项目。
  • eslint-config-standard:Standard 的共享 ESLint 配置,提供了一套严格的规则。
    通过使用 ESLint,开发者可以提高代码质量,减少潜在的错误,并保持代码风格的一致性。

大前端

grunt

一丶前言

二丶安装

安装 Node.js

Grunt 依赖 Node.js 所以在安装之前确保你安装了 Node.js。然后开始安装 Grunt。前往 Node.js官方下载页面 下载安装。

安装 Grunt-cli

使用npm安装 Grunt-cli npm install -g grunt-cli

三丶文件结构

1
2
3
4
5
6
7
8
-src
-dist
-doc
-scss
-test
.gitignore
Gruntfile.js
package.json

| 文件(夹)名 | 描述 | 备注 |
| —- | —–: | :—-: |
| .gitignore | git忽略文件 |忽略node_modules 和 |
| Gruntfile.js | 配置grunt语法文件 | |
| package.json | Node.js 来描述一个项目的文件 | |
| src | 存放源码文件目录 | |
| dist | 存放最终产出文件 |编译后或者压缩后的代码 |
| doc | jsdoc导出的文件夹 | |
| scss | 存放scss文件 | |
| test |存放测试文件 | |
| build | | |
| dest |压缩之后的源码文件 |和src配套出现 |

.gitignore

git忽略文件,主要忽略node_modules文件夹。例如:

1
2
3
4
.sass-cache
.DS_Store
node_modules
doc

package.json

package.json文件其实是 Node.js 来描述一个项目的文件,生成方式有2种:

  1. 可以使用npm init生成,期间填写项目名称
  2. 复制已有文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"name": "gruntxx",
"version": "0.0.1",
"description": "学习 grunt",
"repository": {
"type": "git",
"url": "https://gitee.com/zy_2016/gruntxx.git"
},
"author": "loveit",
"license": "MIT",
"bugs": {
"url": "https://gitee.com/zy_2016/gruntxx.git/Issues"
},
"homepage": "https://gitee.com/zy_2016/gruntxx.git",
"devDependencies": {
"grunt": "^0.4.5",
"grunt-contrib-concat": "^0.4.0",
"grunt-contrib-connect": "^0.8.0",
"grunt-contrib-jshint": "^0.10.0",
"grunt-contrib-sass": "^0.7.4",
"grunt-contrib-uglify": "^0.5.0",
"grunt-contrib-watch": "^0.6.1"
}
}

其中"devDependencies": {} 记录该项目依赖的所有插件。

Gruntfile.js

Gruntfile.js是使用grunt中最重要的配置文件。主要分成 任务配置代码、插件加载代码、任务注册代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
grunt.initConfig({
//读取package.json文件
pkg: grunt.file.readJSON('package.json'),
//任务配置代码
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/<%= pkg.name %>.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
//插件加载代码
grunt.loadNpmTasks('grunt-contrib-uglify');
//任务注册代码
grunt.registerTask('default', ['uglify']);
});

四丶简单demo

做一个demo完成 多文件合并,压缩js文件 这些功能。
可以clone gruntxxx - 更新中 项目参考一下。

建立文档结构

  1. dist 最终js文件
  2. src 存放源代码
  3. package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"name": "grunt_test",
"version": "0.0.1",
"description": "学习 grunt",
"repository": {
"type": "git",
"url": "#"
},
"author": "loveit",
"license": "MIT",
"bugs": {
"url": ""
},
"homepage": "",
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"babel-eslint": "^8.0.0",
"babel-preset-es2015": "^6.24.1",
"grunt": "^1.0.3",
"grunt-babel": "^8.0.0",
"grunt-contrib-clean": "^2.0.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-uglify": "^4.0.0",
"grunt-contrib-watch": "^1.1.0",
"grunt-jsdoc": "^2.3.0",
"load-grunt-tasks": "^4.0.0"
}
}
  1. Gruntfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
separator: ';'
},
dist: {
src: ['src/*.js'],
dest: 'dist/global.js'
}
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> */'
},
build: {
src: 'dist/global.js',
dest: 'dist/<%=pkg.name%><%pkg.version%>.min.js'
}
},
clean: {
build: {
src: ["dist/*"]
}
},
watch: {
build:{
files:['./global.js'],
tasks:['jsdoc'],
options:{
spawn:false
}
}
}
});
grunt.loadNpmTasks('grunt-jsdoc');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('cleandist', ['clean']);
grunt.registerTask('default', ['concat', 'uglify']);
}

下载node_modules

使用npm install下载对应的node模块。

执行

使用grunt执行grunt.registerTask('default', ['concat', 'uglify']);中约定的任务,使用grunt cleandist执行grunt.registerTask('cleandist', ['clean']);中约定的任务。

插件安装

  1. npm install grunt-contrib-uglify –save-dev
  2. npm install grunt-contrib-watch –save-dev
  3. npm install grunt-babel –save-dev //–dev grunt-babel @babel/core @babel/preset-env
  4. npm install load-grunt-tasks –save-dev
  5. npm install grunt-contrib-concat –save-dev
  6. npm install grunt-contrib-clean –save-dev
  7. npm install grunt-jsdoc –save-dev

使用mysqldump对mysql数据库全量备份

使用mysqldump对mysql数据库全量备份

一丶前言

最近项目需要做mysql的数据库备份

二丶分析需求

要求尽量使用最简单的方法实现数据库的全量备份

  1. 可以实现数据库备份的shell脚本
  2. 定时执行备份脚本
  3. 恢复脚本

三丶shell脚本

1
mysqldump -uroot -pnr123456\!Z fault_report > /home/ns5000/javaweb/backup/fault_report-1210.sql

该语句相当于转储为sql文件,将mysql表结构和数据进行备份。
其他要做的就是建立备份日志,删除多余备份。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#保存备份个数 
number=3
#备份保存路径
backup_dir=/home/ns5000/javaweb/backup
#日期
dd=`date +%Y%m%d%H%m`
#备份工具
tool=mysqldump
#用户名
username=root
#密码
password=123456\!A
#将要备份的数据库
database_name=fr
#简单写法 mysqldump -uroot -p123456\!A fault_report > /home/backup/fr.sql
$tool -u$username -p$password $database_name > $backup_dir/$database_name-$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.sql" >> $backup_dir/mysql-backup-log.txt
#找出需要删除的备份
delfile=`ls -l $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/mysql-backup-log.txt
fi

代码配合注释还好理解,不过有几个点需要注意:

  1. password=123456!A 我的密码差不多类似是这样的数字大写特殊符号,如果直接这么写会报错,需要在!前加转义\ 即password=123456\!A;
  2. ls -l $backup_dir/*.sql | awk '{print $9 }' | head -1 $9 指取第九列的数据,但是有一次我测试的时候发现我的文件名称在第8列,之前都是第九列,所以干脆改成ls $backup_dir/*.sql | awk '{print $1 }' | head -1
1
2
3
chmod 755 mysql-backup.sh
./mysql-backup.sh
cat mysql-backup-log.txt

验证(日志文件是否正确,备份文件是否生成)该sh文件之后进入下一步

四丶定时任务

定时任务使用crontab
使用crontab有几个命令必须了解一下

1
2
3
4
5
6
##编辑添加cron
crontab -e
##查看所有cron
crontab -l
##查看全局配置文件
cat /etc/crontab

使用crontab -e

添加cron
:wq保存退出

五丶恢复脚本

mysql -uroot -p"db_password" -f dbname < /home/backup/fr.sql