参考文章
原理
ESlint 使用Espress把js语法转换成AST,然后通过 AST selectors找到静态代码中内容,再根据 rule 的规则去判断这一段js 是否符合规范。
- ESLint 使用 Espree 解析 JavaScript
- ESLint 使用 AST 去分析代码中的模式
- ESLint 是完全插件化的,每个规则都是一个插件,并且可以在运行时添加更多规则
Configuring ESLint
ESLint 是完全可配置的,有2中方式开配置ESLint:
- 使用JavaScript注释,把配置信息直接嵌入到代码源文件中
- 指定一个独立的*配置文件**(.eslintrc.)
ESLint中可配置以下选项:
- 运行环境(Environments), 每种运行环境都带有一组特定的预定义全局变量
- 全局变量(Globals), 运行期间可访问的其他全局变量
- 规则 (Rules),启用了哪些规则,以及其错误级别
- 插件(Plugins),使用了哪些第三方插件定义的额外规则、运行环境、配置等
配置文件
ESlint配置文件支持多种文件格式,如果存在多个配置文件,优先级顺序按如下:
- JavaScript,
.eslintrc.js
, 导出一个配置对象。export an object - JavaScript(ESM),
.eslintrc.cjs
, 在package.json
中 指定"type":"module"
- YAML,
.eslintrc.yaml
,eslintrc.yml
- JSON,
.eslintrc.json
, ESLint中的json 文件可使用js格式的注释 - package.json,
eslintConfig
属性,指定配置文件路径
2中使用方式
- ESLint 会自动查找检测配置文件
.eslintrc.*
,直到 系统的根目录~/
(**除非 指定了root:true
**) - 命令行CLI
—config
参数eslint -c muconfig.json myfiletotest.js
共享设置
在ESlint配置文件中设置可共享的对象,可提供给所有正在执行的规则去访问,可用于自定义规则中想要去访问相同信息。
1 | { |
层叠配置
1 | your-project |
默认情况下,距离要检测文件最近的.eslintrc.*
文件优先级最高,其次才是其父目录,直到根目录,当发现配置文件中指定"root":true
,会停止寻找。
配置层次结构优先级(高->低):
- 行内配置
/*eslint-enable*/
- 命令行选项
--global
,—config
,--rule
- 项目级别 配置
.eslintrc.*
或package.json
与要检测的文件 在同一目录中- 继续 在 其祖先目录中寻找
.eslintrc.*
、package.json
文件,直到根目录(系统上当前用户的主目录(~/)也被视为根目录,即需要寻找到此停止,在8.0版本,该目录中的配置将被忽略),或者找到"root":true
的配置文件
扩展配置文件
一个配置一旦扩展,就可以继承另一个配置文件的所有特征(规则、插件、选项),且可以修改所有选项。有3中配置:
- 基本配置,扩展的配置
- 派生配置,扩展基本配置的配置
- 最后生成的配置:将派生配置合并到基本配置的结果(the result of merging the derived configurantion into the base configuration.)
extends 属性值(2种)
- 字符串,(配置文件的路径、可共享的配置名称、eslint:recommended(推荐的规则)、eslint:all(所有规则))
- 字符串数组,每个附加配置都扩展了它前面的配置
extends属性中的 相对路径、可共享的配置名称,是从它们出现的配置文件的位置解析
配置名称可省略eslint-config-
前缀,例如,airbnb 解析为eslint-config-airbnb
使用可共享的配置(npm包)
可共享的配置是一个npm包,并导出一个配置对象,必须安装在项目的跟目录中。
extends的属性值 可以省略包的eslint-config-
前缀
如何创建一个可共享的配置?
1、create a Node.js module, 名字以
eslint-config-
开头,例如eslint-config-jiang
。npm scoped modules也是支持的,可以命名为
@scope/eslint-config
,或以其作为前缀。例如@jiang/eslint-config
@jiang/eslint-config-myconfig
2、新建
index.js
文件,并导出一个配置对象1
2
3
4
5
6
7
8
9
10
11
12
13
14
15module.exports = {
globals: {
MyGlobales: true,
Jiang: {
name: "jiang",
age: 29,
friends: ["Aime", "Jack"]
}
},
rule: {
semi: [2, "always"],
"no-debugger": [1],
"no-alert": [0]
}
}3、发布可共享的配置包
发布到npm,在package.json 使用
peerDependencies
字段去声明对eslint的依赖。为了兼容性,声明依赖项推荐使用>=
范围语法,即最定要求的eslint版本1
2
3
4
5{
"peerDependencies": {
"eslint" : ">= 8"
}
}如果共享配置也依赖与其他插件,要将其指定为 前置依赖
peerDependency
。 如果,共享配置依赖于第三方解析器或其他可共享配置,要将这些包指定为项目依赖dependencies
本地测试,要发布的包
npm link / pnpm link, 全局链接模块,使当前本地包可在系统范围内或其他位置访问
在需要使共享配置的的项目中,
npm link eslint-config-myconfig
4、使用可共享的配置
1
2
3{
"extends": "eslint-config-myconfig"
}
共享多个配置
可以在同一个npm包共享多个配置,且为包指定默认配置。例如,新建一个特定配置文件my-special-config.js
,包名eslint-config-jiang
,通过以下方式访问附加配置
1 | { |
如果是 scoped modules,则不能省略 eslint-config
命名空间。假设包名@jiang/eslint-config
,
1 | { |
使用来自插件的规则
插件 也是一个 npm包,可给ESLint添加新规则,导出可共享配置。要确保该npm包安装在ESLint能访问到的目录下。
plugins属性值可以省略包名的前缀eslint-plugin-
extends属性值 格式: plugin:
+ 包名 + /
+ 配置名称, 例如 plugin:react/recommended
1 | { |
配置名称, 在configs
选项设置
1 | module.exports = { |
使用eslint:recommended
启用eslint推荐的规则子集,rules页中复选框选中的规则
使用eslint:all
启用当前eslint版本中所有的核心规则
更精细化配置,overrides属性
使用overrides属性,根据配置中文件 glob模式覆盖规则
1 | { |
忽略ESlint规则检查
1、.eslintignore 文件
在项目根目录下创建.eslintignore
文件中指定要忽略检查的文件或目录。
- 每一行一个glob模式,指定要忽略的路径
#
开头的行 被视为注释- 路径时相对于当前工作目录的
!
是否定模式
1 | # Ignore build files except build/test.js |
2、配置文件 中的ignorePatterns
使用ignorePatterns
指定要忽略检查的文件
1 | { |
参考文章
原理
ESlint 使用Espress把js语法转换成AST,然后通过 AST selectors找到静态代码中内容,再根据 rule 的规则去判断这一段js 是否符合规范。
- ESLint 使用 Espree 解析 JavaScript
- ESLint 使用 AST 去分析代码中的模式
- ESLint 是完全插件化的,每个规则都是一个插件,并且可以在运行时添加更多规则
Configuring ESLint
ESLint 是完全可配置的,有2中方式开配置ESLint:
- 使用JavaScript注释,把配置信息直接嵌入到代码源文件中
- 指定一个独立的*配置文件**(.eslintrc.*)*
ESLint中可配置以下选项:
- 运行环境(Environments), 每种运行环境都带有一组特定的预定义全局变量
- 全局变量(Globals), 运行期间可访问的其他全局变量
- 规则 (Rules),启用了哪些规则,以及其错误级别
- 插件(Plugins),使用了哪些第三方插件定义的额外规则、运行环境、配置等
配置文件
ESlint配置文件支持多种文件格式,如果存在多个配置文件,优先级顺序按如下:
- JavaScript,
.eslintrc.js
, 导出一个配置对象。export an object - JavaScript(ESM),
.eslintrc.cjs
, 在package.json
中 指定"type":"module"
- YAML,
.eslintrc.yaml
,eslintrc.yml
- JSON,
.eslintrc.json
, ESLint中的json 文件可使用js格式的注释 - package.json,
eslintConfig
属性,指定配置文件路径
2中使用方式
- ESLint 会自动查找检测配置文件
.eslintrc.*
,直到 系统的根目录~/ (除非 指定了root:true) - 命令行CLI
—config
参数eslint -c muconfig.json myfiletotest.js
共享设置
在ESlint配置文件中设置可共享的对象,可提供给所有正在执行的规则去访问,可用于自定义规则中想要去访问相同信息。
1 | { |
层叠配置
1 | your-project |
默认情况下,距离要检测文件最近的.eslintrc.*
文件优先级最高,其次才是其父目录,直到根目录,当发现配置文件中指定"root":true
,会停止寻找。
配置层次结构优先级(高->低):
- 行内配置
/*eslint-enable*/
- 命令行选项
--global
,—config
,--rule
- 项目级别 配置
.eslintrc.*
或package.json
与要检测的文件 在同一目录中- 继续 在 其祖先目录中寻找
.eslintrc.*
、package.json
文件,直到根目录(系统上当前用户的主目录(~/)也被视为根目录,即需要寻找到此停止,在8.0版本,该目录中的配置将被忽略),或者找到"root":true
的配置文件
扩展配置文件
一个配置一旦扩展,就可以继承另一个配置文件的所有特征(规则、插件、选项),且可以修改所有选项。有3中配置:
- 基本配置,扩展的配置
- 派生配置,扩展基本配置的配置
- 最后生成的配置:将派生配置合并到基本配置的结果(the result of merging the derived configurantion into the base configuration.)
extends 属性值(2种)
- 字符串,(配置文件的路径、可共享的配置名称、eslint:recommended(推荐的规则)、eslint:all(所有规则))
- 字符串数组,每个附加配置都扩展了它前面的配置
extends属性中的 相对路径、可共享的配置名称,是从它们出现的配置文件的位置解析
配置名称可省略eslint-config-前缀,例如,airbnb 解析为eslint-config-airbnb
使用可共享的配置(npm包)
可共享的配置是一个npm包,并导出一个配置对象,必须安装在项目的跟目录中。
extends的属性值 可以省略包的eslint-config-前缀
如何创建一个可共享的配置?
1、create a Node.js module, 名字以
eslint-config-
开头,例如eslint-config-jiang
。npm scoped modules也是支持的,可以命名为
@scope/eslint-config
,或以其作为前缀。例如@jiang/eslint-config
@jiang/eslint-config-myconfig
2、新建
index.js
文件,并导出一个配置对象1
2
3
4
5
6
7
8
9
10
11
12
13
14
15module.exports = {
globals: {
MyGlobales: true,
Jiang: {
name: "jiang",
age: 29,
friends: ["Aime", "Jack"]
}
},
rule: {
semi: [2, "always"],
"no-debugger": [1],
"no-alert": [0]
}
}3、发布可共享的配置包
发布到npm,在package.json 使用peerDependencies字段去声明对eslint的依赖。为了兼容性,声明依赖项推荐使用
>=
范围语法,即最定要求的eslint版本1
2
3
4
5{
"peerDependencies": {
"eslint" : ">= 8"
}
}如果共享配置也依赖与其他插件,要将其指定为 前置依赖
peerDependency
。 如果,共享配置依赖于第三方解析器或其他可共享配置,要将这些包指定为项目依赖dependencies
本地测试,要发布的包
- npm link / pnpm link, 全局链接模块,使当前本地包可在系统范围内或其他位置访问
- 在需要使共享配置的的项目中,
npm link eslint-config-myconfig
4、使用可共享的配置
1
2
3{
"extends": "eslint-config-myconfig"
}
共享多个配置
可以在同一个npm包共享多个配置,且为包指定默认配置。例如,新建一个特定配置文件my-special-config.js
,包名eslint-config-jiang
,通过以下方式访问附加配置
1 | { |
如果是 scoped modules,则不能省略 eslint-config
命名空间。假设包名@jiang/eslint-config
,
1 | { |
使用来自插件的规则
插件 也是一个 npm包,可给ESLint添加新规则,导出可共享配置。要确保该npm包安装在ESLint能访问到的目录下。
plugins属性值可以省略包名的前缀eslint-plugin-
extends属性值 格式: plugin:
+ 包名 + /
+ 配置名称, 例如 plugin:react/recommended
1 | { |
配置名称, 在configs
选项设置
1 | module.exports = { |
使用eslint:recommended
启用eslint推荐的规则子集,rules页中复选框选中的规则
使用eslint:all
启用当前eslint版本中所有的核心规则
更精细化配置,overrides属性
使用overrides属性,根据配置中文件 glob模式覆盖规则
1 | { |
忽略ESlint规则检查
1、.eslintignore 文件
在项目根目录下创建.eslintignore
文件中指定要忽略检查的文件或目录。
- 每一行一个glob模式,指定要忽略的路径
#
开头的行 被视为注释- 路径时相对于当前工作目录的
!
是否定模式
1 | # Ignore build files except build/test.js |
2、配置文件 中的ignorePatterns
使用ignorePatterns
指定要忽略检查的文件
1 | { |
语言相关的选项
指定环境
一个环境提供了一组预定义的全局变量。可用的环境:brower、node、commonjs、es6、shared-node-browser、amd、mocha、jest、jquery、mongo、shelljs
使用注释, 在js文件中指定环境
1
/* eslint-env node, mocha*/
在配置文件中,使用
env
属性来指定环境并设为true1
2
3
4
5
6
7
8{
"env": {
"browser": true,
"commonjs": true,
"es2021": true,
"node": true,
}
}在
package.json
中1
2
3
4
5
6
7
8
9
10
11{
name:"eslint-demo",
"version": "1.0.0",
eslintConfig: {
"env": {
"browser": true,
"es2021": true,
"node": true
}
}
}
指定全局变量
当访问未定义的变量时,ESLintno-undef
规则会发出警告。可在配置文件中定义或使用注释定义全局变量。
使用注释定义全局变量, 默认是可读的,使用
writable
标识其可被写入1
2
3/* global var1, var2 */
/* global var1:writable, var2:writable */在配置文件定义全局变量,使用
globals
属性设置为一个对象, 可用”off”禁用全局变量1
2
3
4
5
6
7{
"globals": {
"var1": "writable",
"var2": "readonly",
"Promise": "off"
}
}
指定解析器
ESLint可以指定想要支持的js语言选项,ESlint默认支持 ECMAScript 5 语法。使用parseroptions
属性设置一个对象,其属性如下:
- ecmaVersion, 可设置为3,5(defalut),6,7,8,9,11,或者2015(same as 6),2016(7),2017(8),latest (最新支持的版本)
- sourceType,类型,
script
或module
, - allowReserved, 允许使用保留字做标识符
- ecmaFeatures, 对象,指定想要使用的附件语言功能。例如
jsx: true
, 支持JSX语法
1 | { |
援疆计划
自我介绍
各位领导,下午好,我是刘振江,来自产险科技中心个人客户研发团队,是一名前端工程师。入司2年多,一直在网销非车项目组工作,负责开发维护我们平安保险商城官网,配合业务老师上线各类的营销活动。另外,还参与优化了ITS航母系统内的录单、出单流程,以及开发完善了新产品配置、上下架等功能。总体来讲,做的还可以,需求方满意,自己也小有成就感。
我从小在新疆生活长大,小学、初中在团场上的(农二师26团),高中去了库尔勒,大学考到了武汉,工作来了深圳。对新疆是有感情,也是热爱的。所以当知道公司有”援疆派驻人才”招募计划,我第一时间就报名了,真的希望能借此机会,回到新疆发展,通过努力、扎实的工作,能办出些实事来,去实实在在的为新疆的发展做出贡献。
与此同时,我也想着能通过这份工作,好好的去宣传新疆,让更过的人了解真正的新疆,从而喜欢上新疆。因为我自身感受而言,内地的朋友对新疆了解的不多,往往会把新疆想象成一个神秘、封闭和落后的地方,他们仅仅知道些新疆美食、美景。甚至有些人会有些误解,例如“新疆不安全”,“新疆交通落后,出行不方便”,“新疆干旱没水,到处都是戈壁沙漠”等。
援疆结束后,我希望能够继续留在新疆工作,毕竟新疆潜力巨大,发展一定会越来越好。对我个人而言,则会有很大的个人成长与发展空间。还有一点,父母都在新疆,发小好友,初、高中同学也大都在新疆工作和生活,从家庭、友情方面考虑,留在新疆,应该是好的选择。
问题?
- 援疆人才培养方案是怎样的?有培训的具体计划?
- 到了新疆,有老师或领导带我们吗?大致工作是什么?需要哪些技能,有没有相应的指导或培训,我们考核指标是怎样?
希望达成的目标?
- 能办出些实事来,能真正让喀什发展的更好,给喀什地区的各族群众带来好处
- 自己能通过文字、照片、视频等形式记录我的援疆历程,让更多的人知道援疆,去了解新疆,去参与到新疆的建设与发展中。
新疆安全
新疆便民警务站很多
进入餐厅、超市、电影院等公共场所,随身带的大小包都要过安检仪,类似在深圳乘坐地铁过安检一样
安保措施严格繁琐,但为了自治区的长治久安,大家都能体谅和理解
新疆交通
- 新疆是全国机场数量最多的省区
- 全疆所有地区地州都通了铁路; 哈密、吐鲁番乌鲁木齐(兰新高铁)。 城际列车,南疆之星(乌鲁木齐-库尔勒),北疆之星(乌鲁木齐-伊宁)
- 新建公路,最美独库公路/天山公路(独山子-库车),横穿天山,连接南北疆,沿途有那拉提草原(巩乃斯林场),巴音布克草原(九曲十八弯),天山大峡谷,库车大峡谷
伊昭公路(伊宁-昭苏),伊犁 薰衣草, 天马,昭苏马场 - 塞果高速(赛里木湖-果子沟)
新疆美食
囊、拌面、大盘鸡,库尔勒香梨、伊犁的奶茶、阿克苏苹果、库车的小白杏、吐鲁番的葡萄、哈密瓜
新疆美景
北疆,高山、草原,湖泊、森林,塞外江南
南疆,沙漠、戈壁,大漠边塞风光,喀什老城、慕士塔格峰、天山大峡谷、罗布泊、塔克拉玛干沙漠
新疆方言
- 劳道
- 皮牙子
- 大肉
- 勺子-
- 哈马斯,(全部)
- 巴郎子、羊缸子(妇女)
- 麦格来 (过来)
- 赶巴扎 (国际大巴扎)
喀什
新Q, “喀什噶尔”,”玉石集中之地”, 1个县级市、10个县、1个自治县(塔什库尔干塔吉克族)
汉族 28万,维吾尔族 428万 92%
喀什噶尔石榴,莎车巴旦木,伽师瓜,叶城的核桃
帕米尔冰川矿区水