-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于前端代码风格统一:eslint使用总结 #34
Comments
js 推荐规范Airbnb JavaScript 风格指南() {JavaScript最合理的方法 A mostly reasonable approach to JavaScript
这个指南支持的其他语言翻译版请看 Translation Other Style Guides 目录
Types
References
Objects
// very bad
const original = { a: 1, b: 2 };
const copy = Object.assign(original, { c: 3 }); // this mutates `original` ಠ_ಠ
delete copy.a; // so does this
// bad
const original = { a: 1, b: 2 };
const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }
// good es6扩展运算符 ...
const original = { a: 1, b: 2 };
// 浅拷贝
const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }
// rest 赋值运算符
const { a, ...noA } = copy; // noA => { b: 2, c: 3 } Arrays
Destructuring
Strings
Functions
Arrow Functions
Classes & Constructors
Modules
Iterators and Generators
Properties
Variables
Hoisting
Comparison Operators & Equality
Blocks
Control Statements
Comments
Whitespace
Commas
Semicolons
Type Casting & Coercion
Naming Conventions
Accessors
Events
jQuery
ES5 兼容性ECMAScript 6+ (ES 2015+) Styles
Standard Library标准库中包含一些功能受损但是由于历史原因遗留的工具类
Testing
Performance
ResourcesLearning ES6
Read This Tools
Other Style Guides
Other Styles
Further Reading
Books
Blogs
Podcasts In the WildThis is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
TranslationThis style guide is also available in other languages:
The JavaScript Style Guide GuideChat With Us About JavaScript
ContributorsLicense(The MIT License) Copyright (c) 2012 Airbnb Permission is hereby granted, free of charge, to any person obtaining The above copyright notice and this permission notice shall be THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, AmendmentsWe encourage you to fork this guide and change the rules to fit your team’s style guide. Below, you may list some amendments to the style guide. This allows you to periodically update your style guide without having to deal with merge conflicts. }; |
Airbnb CSS / Sass 指南用更合理的方式写 CSS 和 Sass 翻译自 Airbnb CSS / Sass Styleguide 目录
术语规则声明我们把一个(或一组)选择器和一组属性称之为 “规则声明”。举个例子: .listing {
font-size: 18px;
line-height: 1.2;
} 选择器在规则声明中,“选择器” 负责选取 DOM 树中的元素,这些元素将被定义的属性所修饰。选择器可以匹配 HTML 元素,也可以匹配一个元素的类名、ID, 或者元素拥有的属性。以下是选择器的例子: .my-element-class {
/* ... */
}
[aria-hidden] {
/* ... */
} 属性最后,属性决定了规则声明里被选择的元素将得到何种样式。属性以键值对形式存在,一个规则声明可以包含一或多个属性定义。以下是属性定义的例子: /* some selector */ {
background: #f1f1f1;
color: #333;
} CSS格式
Bad .avatar{
border-radius:50%;
border:2px solid white; }
.no, .nope, .not_good {
// ...
}
#lol-no {
// ...
} Good .avatar {
border-radius: 50%;
border: 2px solid white;
}
.one,
.selector,
.per-line {
// ...
} 注释
OOCSS 和 BEM出于以下原因,我们鼓励使用 OOCSS 和 BEM 的某种组合:
OOCSS,也就是 “Object Oriented CSS(面向对象的CSS)”,是一种写 CSS 的方法,其思想就是鼓励你把样式表看作“对象”的集合:创建可重用性、可重复性的代码段让你可以在整个网站中多次使用。 参考资料:
BEM,也就是 “Block-Element-Modifier”,是一种用于 HTML 和 CSS 类名的_命名约定_。BEM 最初是由 Yandex 提出的,要知道他们拥有巨大的代码库和可伸缩性,BEM 就是为此而生的,并且可以作为一套遵循 OOCSS 的参考指导规范。
示例 <article class="listing-card listing-card--featured">
<h1 class="listing-card__title">Adorable 2BR in the sunny Mission</h1>
<div class="listing-card__content">
<p>Vestibulum id ligula porta felis euismod semper.</p>
</div>
</article> .listing-card { }
.listing-card--featured { }
.listing-card__title { }
.listing-card__content { }
ID 选择器在 CSS 中,虽然可以通过 ID 选择元素,但大家通常都会把这种方式列为反面教材。ID 选择器给你的规则声明带来了不必要的高优先级,而且 ID 选择器是不可重用的。 想要了解关于这个主题的更多内容,参见 CSS Wizardry 的文章,文章中有关于如何处理优先级的内容。 JavaScript 钩子避免在 CSS 和 JavaScript 中绑定相同的类。否则开发者在重构时通常会出现以下情况:轻则浪费时间在对照查找每个要改变的类,重则因为害怕破坏功能而不敢作出更改。 我们推荐在创建用于特定 JavaScript 的类名时,添加 <button class="btn btn-primary js-request-to-book">Request to Book</button> 边框在定义无边框样式时,使用 Bad .foo {
border: none;
} Good .foo {
border: 0;
} Sass语法
属性声明的排序
变量变量名应使用破折号(例如 Mixins为了让代码遵循 DRY 原则(Don't Repeat Yourself)、增强清晰性或抽象化复杂性,应该使用 mixin,这与那些命名良好的函数的作用是异曲同工的。虽然 mixin 可以不接收参数,但要注意,假如你不压缩负载(比如通过 gzip),这样会导致最终的样式包含不必要的代码重复。 扩展指令应避免使用 嵌套选择器请不要让嵌套选择器的深度超过 3 层! .page-container {
.content {
.profile {
// STOP!
}
}
} 当遇到以上情况的时候,你也许是这样写 CSS 的:
再说一遍: 永远不要嵌套 ID 选择器! 如果你始终坚持要使用 ID 选择器(劝你三思),那也不应该嵌套它们。如果你正打算这么做,你需要先重新检查你的标签,或者指明原因。如果你想要写出风格良好的 HTML 和 CSS,你是不应该这样做的。 |
eslint如何设置这个配置? 17.2 不要用选择操作符代替控制语句。 |
环境配置:
引入eslint基础包: npm/yarn install eslint -D
让webpack知道pre-loader插件eslint-loader: npm/yarn install eslint-loader -D;
此时启动, eslint还不知道通过babel使用的es6特性: npm/yarn install babel-eslint -D;
并在配置文件中 {
parser: 'babel-eslint',
}
.eslintrc文件进行配置
文件中禁止检测某一行: /* eslint-disable no-unused-vars */
使用npm pre-commit钩子在git commit时自动检测代码规范
webpack的相关配置:
注意:由于webpack在默认配置下遇到error并不会抛出错误终止代码打包,需要在webpack命令上添加bail参数让webpack抛出错误:
一般.eslintrc主要组成:
主要关注点主要三个:
规则格式是"<规则名称>: <告警级别>",告警级别分为三种:
插件规则格式:
引入扩展的目的是减少我们挑选规则的时间,但这些规则不一定切合团队和项目的具体情况。如果一味地让团队去遵守别人制定的规则,很可能造成对现存代码的大范围修改,反而降低了开发效率。因此,建议先依据团队现有的良好的风格挑选出最符合现有开发习惯的规则,保证已有的好习惯不被破坏的基础上,再添加一些希望在团队中推广的规则。
此外的有几个比较重要的配置:
常用有用规则:
在条件判断中不能出现赋值语句:"no-cond-assign": "error"
if ( a=1 ) { }
消除魔幻数字no-magic-numbers :将意义不明的数字声明为意义明确的常量,常量名称能让代码自注释,从而提高了代码的可读性
限制函数的最大参数个数"max-params": ["error", 4];
箭头回调函数优先,回调函数常常会遇到this引用的指向问题 :"prefer-arrow-callback": "warn";
模版优先: "prefer-template": "error";
禁用var关键字: "no-var": "error"
消除不必要的类型转换: if(!!str)、Boolean(str)
"no-extra-boolean-cast": "error"
console、alert代码:
"no-console": "warn"
“no-alert”: "warn"
no-else-return
使用===
eqeqeq: ["error", "always"]
parseInt()始终使用基数以消除意想不到的后果:
radix:‘always’
现有的几套通用规则:eslint官方提供了3种预安装包:
eslint-config-google : Google标准
eslint-config-airbnb : Airbnb
依赖eslint, eslint-plugin-import, eslint-plugin-react, and eslint-plugin-jsx-a11y等插件,并且对各个插件的版本有所要求。可以执行以下命令查看所依赖的版本:
npm info "eslint-config-airbnb@latest" peerDependencies
执行以下shell
目前来看,公认的最好的标准是Airbnb标准。建议全局安装这些标准,然后在你的.eslint配置文件中直接使用。
es6比较推荐的规范
**
格式、类型、对象、数组、函数
**
0. 格式: 单引号string、两空格缩进、结尾分号、行尾非空格、括号前后空格、模板字符串
no-undef, prefer-const, no-const-assign, no-var: 保证块级作用域;
no-unused-vars: 禁止无用的声明
object-shorthand
array-callback-return: 数组遍历方法(map/each/filter/some/reduce/every...)回调都有返回: 保证无副作用
prefer-destructuring: 尽可能使用解构。多种好处:默认值+pick数据等等
5.no-else-return
···
// good
function foo() {
if (x) {
return x;
}
return y;
}
···
参考链接:
The text was updated successfully, but these errors were encountered: