• 全局安装eslint
  • 安装ESlintAuthFix

cmd + shift + p => install pack => ESlintAuthFix

  • 查看eslint的位置
    which eslint

  • 配置环境变量

    xport PATH=path::$PATH

  • 设置ESlintAuthFix

package setting => ESlintAuthFix => settingDefault


{
  "eslint_path": "path",
  "show_panel": true
}
  • 设置快捷键

{ "keys": ["ctrl+shift+h"], "command": "eslint_auto_fix" }

git commit 中 Emoji意义

Emoji 意义
? 解决BUG
? 改进代码的结构/格式
? 部署东西
? 删除代码或文件
? 更改配置文件
✏️ 修正错别字
? 更新UI和样式文件
? 初始提交
? 解决iOS上的某些问题
? 修复macOS上的某些内容
介绍新功能
? 添加日志
? 删除日志
? 更新编译的文件或包
? 致力于响应式设计
? 由于外部API更改而更新代码
? 修复Android上的某些内容
? 在Linux上修复某些内容
? 添加或更新.gitignore文件
? 添加或更新快照
? 改善用户体验/可用性
提高可访问性
⬆️ 升级依赖关系
⬇️ 降级依赖关系
? 解决安全问题
添加测试
? 关键修补程序
? 记录源代码
? 添加分析或跟踪代码
重构代码
? 将依赖关系固定到特定版本
? 在Windows上修复某些内容
? 合并分支
恢复更改
? 编写需要改进的错误代码
? 关于Docker的工作
? 添加CI构建系统
? 国际化和本地化
? 移动或重命名文件
删除依赖项
添加依赖关系

chattr命令

chattr命令:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

语法 chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录


#参数  描述
-R  #递归处理所有的文件及子目录。
-V  #详细显示修改内容,并打印输出。
–   #失效属性。
+   #激活属性。
=   #指定属性。
A   #Atime,告诉系统不要修改对这个文件的最后访问时间。
S   #Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a   #Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
i   #Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
D   #检查压缩文件中的错误。
d   #No dump,在进行文件系统备份时,dump程序将忽略这个文件。
C   #Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。
s   #Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域。
u   #Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。

#例子

# 用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/resolv.conf

# 用lsattr查询文件属性:
lsattr /etc/resolv.conf
----i-------- /etc/resolv.conf #显示如上

# 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
chattr +a /var/log/messages

Promise笔记

执行流程

执行流程

// Promise的设计

new Promise(
    /* 执行器 executor */
    function (resolve, reject) {
        // 一段耗时很长的异步操作
        resolve(); // 数据处理完成
        reject(); // 数据处理出错
    }
)
    .then(function A() {
        // 成功,下一步
    }, function B() {
        // 失败,做相应处理
    });

支持情况

支持情况

三个状态

  • pending[待定] 初始状态
  • fulfilled[实现] 操作成功
  • rejected[被否定] 操作失败

Promise 状态一经改变,不会再边
Promise 一经创建,执行器立即执行

- 阅读剩余部分 -

正则表达式

定义

正则表达式是一种描述字符串数据模式的方法,是检查、处理字符串的强力工具。

创建正则表达式

var re1 = new RegExp(“abc”);
var re2 = /abc/;

使用构造函数创建时,反斜杠的使用规则与往常相同。
使用双斜杠字面值创建时,不确定字符是否具有特殊含义,而不是字母、数字、空格式,只要在字符前加上反斜杠即可。

匹配测试

test方法

接受用户传递的字符串,并返回一个布尔值,表示字符串中是否包含能与表达式模式匹配的字符串。

var re2 = /abc/;
console.log(re2.test('abcde'));
// > true
console.log(re2.test('abxde'));
// > false

exec方法

如果无法匹配模式则返回null,否则返回一个表示匹配字符串信息的对象。
exec方法返回的对象中包含index属性,表示字符串成功匹配的起始位置。

var re2 = /abc/;
console.log(re2.exec('abcde'));
// > ["abc", index: 0, input: "abcde"]
console.log(re2.exec('abxde'));
// > null

若正则表达式中包含圆括号的子表达式分组,与这些分组匹配的文本也会出现在数组中。
第一个元素是与整个模式匹配的字符串,
其后是与第一个分组匹配的部分字符串,然后是第二个分组如此类推。

var dataTimeRE = /(\d{1,2})-(\d{1,2})-(\d{4})/;
var str = '24-8-2016';
var match = dataTimeRE.exec(str);
console.log(match);

// > ["24-8-2016", "24", "8", "2016", index: 0, input: "24-8-2016”]

字符组快捷写法

  • \d --数字符号
  • \w --字母和数字符号
  • \s --空白符号(空格,制表符,换行符等)
  • \D --非数字符号
  • \W --非字母和数字符号
  • \S --非空白符号
    . --除了换行符以外的任意符号

    部分模式重复

  • + --该元素至少重复一次
  • * --该元素至少重复一次,同时可以匹配模式不存在的情况
  • ? --可选,模式出现0次或1次
  • { } --指明模式出现的次数。{4},4次。{2,4},2~4次。{,4},0~4次。{4.},至少4次以上。

    边界

  • ^ --字符始位置
  • $ --字符结束位置
  • \b --单词边界( \w 集合)
    /^\d+$/:匹配一个或者多个数字组成的字符串。
    /^!/ :匹配任何以感叹号开头的字符串。
    /x^/ :不匹配任何字符串。

子表达式分组

如果一次性相想对多个元素使用*或者+,那么就需要使用分组。

var strRE = /boo+(hoo+)+/i;
var str = 'Booooohooooohoohoooo';
var test = strRE.test(str);
console.log(test);
// > true

选项模式

管道符号(|),表示从其左侧的模式和右侧的模式任意选择一个进行匹配。

var animalCount = /\b\d+ (pig|cow|chicken)s?\b/;
console.log(animalCount.test("15 cows"));
// > true

用例

检查手机号码

function isMobile(tel){
     return /^((\(\d{2,3}\))|(\d{3}\-))?(1[34578]\d{9})$/.test(tel);
}

获取URL的Query参数

function getQuery(name) {
    var result = location.search.match(new RegExp("[\?\&]" + name+ "=([^\&]+)","i"));
    if(result == null || result.length < 1){
        return "";
    }
    return result[1];
}

拆分host后缀

function domainarr(url){
     var durl = /http:\/\/([^\/]+)\//i;
     var hosts = url.match(durl);
     var d_arr;
     hosts = hosts[1];
     d_arr = hosts.split('.');
     return d_arr;
}