如何配置eslint react检测React代码

Babel 入门教程 - 阮一峰的网络日志
Babel 入门教程
(说明:本文选自我的新书的第一章)
是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。
这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持。下面是一个例子。
input.map(item => item + 1);
input.map(function (item) {
return item + 1;
上面的原始代码用了箭头函数,这个特性还没有得到广泛支持,Babel将其转为普通函数,就能在现有的JavaScript环境执行了。
一、配置文件.babelrc
Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。
该文件用来设置转码规则和插件,基本格式如下。
"presets": [],
"plugins": []
presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。
# ES2015转码规则
$ npm install --save-dev babel-preset-es2015
# react转码规则
$ npm install --save-dev babel-preset-react
# ES7不同阶段语法提案的转码规则(共有4个阶段),选装一个
$ npm install --save-dev babel-preset-stage-0
$ npm install --save-dev babel-preset-stage-1
$ npm install --save-dev babel-preset-stage-2
$ npm install --save-dev babel-preset-stage-3
然后,将这些规则加入.babelrc。
"presets": [
"plugins": []
注意,以下所有Babel工具和模块的使用,都必须先写好.babelrc。
二、命令行转码babel-cli
Babel提供babel-cli工具,用于命令行转码。
它的安装命令如下。
$ npm install --global babel-cli
基本用法如下。
# 转码结果输出到标准输出
$ babel example.js
# 转码结果写入一个文件
# --out-file 或 -o 参数指定输出文件
$ babel example.js --out-file compiled.js
$ babel example.js -o compiled.js
# 整个目录转码
# --out-dir 或 -d 参数指定输出目录
$ babel src --out-dir lib
$ babel src -d lib
# -s 参数生成source map文件
$ babel src -d lib -s
上面代码是在全局环境下,进行Babel转码。这意味着,如果项目要运行,全局环境必须有Babel,也就是说项目产生了对环境的依赖。另一方面,这样做也无法支持不同项目使用不同版本的Babel。
一个解决办法是将babel-cli安装在项目之中。
$ npm install --save-dev babel-cli
然后,改写package.json。
"devDependencies": {
"babel-cli": "^6.0.0"
"scripts": {
"build": "babel src -d lib"
转码的时候,就执行下面的命令。
$ npm run build
三、babel-node
babel-cli工具自带一个babel-node命令,提供一个支持ES6的REPL环境。它支持Node的REPL环境的所有功能,而且可以直接运行ES6代码。
它不用单独安装,而是随babel-cli一起安装。然后,执行babel-node就进入PEPL环境。
$ babel-node
> (x => x * 2)(1)
babel-node命令可以直接运行ES6脚本。将上面的代码放入脚本文件es6.js,然后直接运行。
$ babel-node es6.js
babel-node也可以安装在项目中。
$ npm install --save-dev babel-cli
然后,改写package.json。
"scripts": {
"script-name": "babel-node script.js"
上面代码中,使用babel-node替代node,这样script.js本身就不用做任何转码处理。
四、babel-register
babel-register模块改写require命令,为它加上一个钩子。此后,每当使用require加载.js、.jsx、.es和.es6后缀名的文件,就会先用Babel进行转码。
$ npm install --save-dev babel-register
使用时,必须首先加载babel-register。
require("babel-register");
require("./index.js");
然后,就不需要手动对index.js转码了。
需要注意的是,babel-register只会对require命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用。
五、babel-core
如果某些代码需要调用Babel的API进行转码,就要使用babel-core模块。
安装命令如下。
$ npm install babel-core --save
然后,在项目中就可以调用babel-core。
var babel = require('babel-core');
// 字符串转码
babel.transform('code();', options);
// => { code, map, ast }
// 文件转码(异步)
babel.transformFile('filename.js', options, function(err, result) {
// => { code, map, ast }
// 文件转码(同步)
babel.transformFileSync('filename.js', options);
// => { code, map, ast }
// Babel AST转码
babel.transformFromAst(ast, code, options);
// => { code, map, ast }
配置对象options,可以参看官方文档。
下面是一个例子。
var es6Code = 'let x = n => n + 1';
var es5Code = require('babel-core')
.transform(es6Code, {
presets: ['es2015']
// '"use strict";\n\nvar x = function x(n) {\n
return n + 1;\n};'
上面代码中,transform方法的第一个参数是一个字符串,表示需要转换的ES6代码,第二个参数是转换的配置对象。
六、babel-polyfill
Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。
举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。
安装命令如下。
$ npm install --save babel-polyfill
然后,在脚本头部,加入如下一行代码。
import 'babel-polyfill';
require('babel-polyfill');
Babel默认不转码的API非常多,详细清单可以查看babel-plugin-transform-runtime模块的文件。
七、浏览器环境
Babel也可以用于浏览器环境。但是,从Babel 6.0开始,不再直接提供浏览器版本,而是要用构建工具构建出来。如果你没有或不想使用构建工具,可以通过安装5.x版本的babel-core模块获取。
$ npm install babel-core@5
运行上面的命令以后,就可以在当前目录的node_modules/babel-core/子目录里面,找到babel的浏览器版本browser.js(未精简)和browser.min.js(已精简)。
然后,将下面的代码插入网页。
&script src="node_modules/babel-core/browser.js">&/script>
&script type="text/babel">
// Your ES6 code
上面代码中,browser.js是Babel提供的转换器脚本,可以在浏览器运行。用户的ES6脚本放在script标签之中,但是要注明type="text/babel"。
另一种方法是使用模块提供的浏览器版本,将其插入网页。
&script src="/ajax/libs/babel-standalone/6.4.4/babel.min.js">&/script>
&script type="text/babel">
// Your ES6 code
注意,网页中实时将ES6代码转为ES5,对性能会有影响。生产环境需要加载已经转码完成的脚本。
下面是如何将代码打包成浏览器可以使用的脚本,以Babel配合Browserify为例。首先,安装babelify模块。
$ npm install --save-dev babelify babel-preset-es2015
然后,再用命令行转换ES6脚本。
browserify script.js -o bundle.js \
-t [ babelify --presets [ es2015 react ] ]
上面代码将ES6脚本script.js,转为bundle.js,浏览器直接加载后者就可以了。
在package.json设置下面的代码,就不用每次命令行都输入参数了。
"browserify": {
"transform": [["babelify", { "presets": ["es2015"] }]]
八、在线转换
Babel提供一个,可以在线将ES6代码转为ES5代码。转换后的代码,可以直接作为ES5代码插入网页运行。
九、与其他工具的配合
许多工具需要Babel进行前置转码,这里举两个例子:ESLint和Mocha。
用于静态检查代码的语法和风格,安装命令如下。
$ npm install --save-dev eslint babel-eslint
然后,在项目根目录下,新建一个配置文件.eslint,在其中加入parser字段。
"parser": "babel-eslint",
"rules": {
再在package.json之中,加入相应的scripts脚本。
"name": "my-module",
"scripts": {
"lint": "eslint my-files.js"
"devDependencies": {
"babel-eslint": "...",
"eslint": "..."
则是一个测试框架,如果需要执行使用ES6语法的测试脚本,可以修改package.json的scripts.test。
"scripts": {
"test": "mocha --ui qunit --compilers js:babel-core/register"
上面命令中,--compilers参数指定脚本的转码器,规定后缀名为js的文件,都需要使用babel-core/register先转码。
真正学会 React 是一个漫长的过程。
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
浏览器安全的基石是"同源政策"(same-origin policy)。很多开发者都知道这一点,但了解得不全面。
前面的文章介绍了 Systemd 的操作命令和基本用法,今天给出一个实例,如何使用 Systemd 启动一个 Node 应用。官方地址:http://eslint.org/
EsLint帮助我们检查Javascript编程时的语法错误。比如:在Javascript应用中,你很难找到你漏泄的变量或者方法。EsLint能够帮助我们分析JS代码,找到bug并确保一定程度的JS语法书写的正确性。
EsLint是建立在Esprima(ECMAScript解析架构)的基础上的。Esprima支持ES5.1,本身也是用ECMAScript编写的,用于多用途分析。EsLint不但提供一些默认的规则(可扩展),也提供用户自定义规则来约束我们写的Javascript代码。
EsLint提供以下支持:
自定义错误和提示
EsLint提供以下几种校验:
语法错误校验
不重要或丢失的标点符号,如分号
没法运行到的代码块(使用过WebStorm的童鞋应该了解)
未被使用的参数提醒
漏掉的结束符,如}
确保样式的统一规则,如sass或者less
检查变量的命名
Npm install gulp-eslint &save-dev
在你的项目目录下,运行:eslint &init将会产生一个.eslintrc的文件,文件内容包含一些校验规则
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "double"]
其中&semi&和&quotes&是规则名称。EsLint还提供了error的级别,对应数字,数字越高错误的提示越高,如0代码错误不提示、1代表警告提醒但不影响现有编译、2error会抛出错误。
"extends": "eslint:recommended"
Extends是EsLint默认推荐的验证,你可以使用配置选择哪些校验是你所需要的,可以登录查看
二、自定义配置EsLint
之前提到你可以关掉所有EsLint默认的验证,自行添加所确切需要的验证规则。为此EsLint提供了2个种方式进行设置:
Configuration Comments: 在所要验证的文件中,直接使用Javascript注释嵌套配置信息
Configuration Files: 使用JavaScript、JSON或YAML文件,比如前面提到的.eslintrc文件,当然你也可以在package.json文件里添加eslintConfig字段,EsLint都会自动读取验证。
开始介绍EsLint的用法
parserOptions
EsLint通过parserOptions,允许指定校验的ecma的版本,及ecma的一些特性
"parserOptions": {
"ecmaVersion": 6, //指定ECMAScript支持的版本,6为ES6
"sourceType": "module", //指定来源的类型,有两种&script&或&module&
"ecmaFeatures": {
"jsx": true//启动JSX
EsLint默认使用esprima做脚本解析,当然你也切换他,比如切换成babel-eslint解析
"parser": "esprima" //默认,可以设置成babel-eslint,支持jsx
Environments
Environment可以预设好的其他环境的全局变量,如brower、node环境变量、es6环境变量、mocha环境变量等
"browser": true,
"node": true
如果你想使用插件中的环境变量,你可以使用plugins指定,如下
"plugins": ["example"],
"example/custom": true
指定你所要使用的全局变量,true代表允许重写、false代表不允许重写
"globals": {
"var1": true,
"var2": false
EsLint允许使用第三方插件
"plugins": [
自定义规则,一般格式:&规则名称&:error级别系数。系数0为不提示(off)、1为警告(warn)、2为错误抛出(error),可指定范围,如[1,4]
可以包括Strict模式、也可以是code的方式提醒,如符号等。还可以是第三方的校验,如react。
默认校验的地址
"plugins": [
"rules": {
//Javascript code 默认校验
"eqeqeq": "off", //off = 0
"curly": "error", //error = 2
"quotes": ["warn", "double"], //warn = 1
//使用第三方插件的校验规则
"react/jsx-quotes": 0
& & & & & & /package/eslint-plugin-react ,&此链接是react的eslint使用
三、Gulp中使用
var eslint = require('gulp-eslint');
gulp.task('validate-eslint',function(){
return gulp.src(['app/**/*.js']) //指定的校验路径
.pipe(eslint({configFle:"./.eslintrc"})) //使用你的eslint校验文件
.pipe(eslint.format())
阅读(...) 评论()引入时间维度和空间维度,让信息流向它该去的地方!绽放你的思想。。。
随笔- 450&
评论- 215&
1. 全局安装eslint
npm install -g eslint
npm install -g eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y babel-eslint
2.在项目目录下新建.eslintrc文件
&extends&: &airbnb&,
&parser&: &babel-eslint&,
&browser&: true,
&node&: true,
&mocha&: true
&globals&: {
&Babel&: true,
&React&: true
&plugins&: [
&rules&: {
&global-require&: &off&,
&import/no-unresolved&: &off&,
&no-underscore-dangle&: &off&,
&no-new-func&: &off&,
&no-param-reassign&: &off&,
&react/prefer-stateless-function&: &off&,
&react/no-multi-comp&: &off&,
&react/jsx-no-bind&: &off&,
&react/jsx-indent&: &off&,
&react/jsx-first-prop-new-line&: &off&,
&react/jsx-filename-extension&: &off&,
&no-restricted-syntax&: &off&
3. 编辑器配置linter
F1-&install Extensions,选择 ESLint 即可
sublime text3
install pacakge,选择 SublimeLinter
install pacakge,选择 SublimeLinter-contrib-eslint
SublimeLinter: Enable Linter
阅读(...) 评论()这个项目,首先就是进行了 Button 这个组件的重构以便熟悉熟悉项目。
tingle采用gulp+webpack对代码进行实时编译开发和构建,在目前这个项目中,现有工具不具备代码质量的校验,这样非常不利于项目日后的社区化贡献代码和标准化,因此在这次重构中,决定将 js 的代码质量检查加进去,本来想使用
的,但由于 tingle 是走 es6 风格的 react 组件集,而我发现 jshint 对 es6 及 react 的支持不如 eslint 优雅,所以在最后决定使用 。
在决定使用eslint之后,第一件事就是思考如何将 eslint 用起来,一定要对用户优雅简单。首先就是改造工具,tingle 的构建和开发工具是基于 gulp 做的,在开发的时候我们只需要使用
就可以启动一个带有实时编译 stylus 和 jsx 的 browser-sync server,非常方便,我想 ESLint 的验证应当与这条命令结合,直接写入 gulp 的任务中去。
那么 eslint 的代码质量检查应该放在哪一步好呢?我得出了以下两个答案:
代码修改后实时进行质量检查
代码压缩前进行质量检查
两者都应该做,因为无论是在修改 es6 代码之后,还是压缩打包 es6 代码之前这两步都需要对代码的质量进行验证。
人性化的错误通知
紧接着就是发现错误后的通知,这个非常重要,关乎用户体验。原来使用过 grunt + jshint,当发现错误时会让 terminal 不停得跳,然后在terminal打开之前图标的右上角还有红色的气泡,非常的人性化,这次我也想使用这个设计,在 eslint 发现错误的时候进行这种交互的提示,但查找了一些资料,无从下手,最后改成了使用 node-notifier 这个包来进行 Mac 原生的信息提示,也算是可以接受的,代码质量校验失败时如下图:
&img src=" style="display:float:none"/&
记录下过程
配置 .eslintrc.json 的配置文件并添加进项目根目录,可以考虑抽离出公共的 eslint-config-tingle ,让脚手架中的 eslintrc.json 继承它,日后专门维护这个 config 来进行迭代
编写 eslint 的 gulp task
将此 gulp task 添加到在每次打包之前执行
当 eslint 发现代码校验不通过时不进行接下来的 jsx 的编译,并且给用户提示代码质量检查错误,同时要阻碍 eslint 之后的 gulp 执行,而且不能中断 watch 的任务
遇到的问题:
1.进行 es6 和 react 代码质量检查需要使用 babel-eslint 和 eslint-plugin-react,然后如果你是全局或项目中使用 eslint 你分别要全局或着项目中安装这两个包
"parser": "babel-eslint",
// ...... 其他配置省略
"plugins": [
// ...... 其他配置省略
2.gulp 任务执行失败后不执行后续任务,并且不能中断当前的 watch 任务,具体实现机制如下:
gulp.task('前置任务', function(callback){
if (eslint任务执行成功) {
callback();
callback('错误描述')
gulp.task('后置任务', ['前置任务'], function(){
// 继续执行后置任务
}).on('error', (e) =& {console.log(e)})
总结一下package:
node-notifier
eslint-config-tingle (未来会把 .eslintrc.json 配置单独抽离出来,形成这个配置文件)
babel-eslint
eslint-plugin-react
不用每次保存都去检查每一个js文件,需要做一下缓存
优化 terminal 的提示方式
抽离公共 eslintrc 文件,让脚手架中的 .eslintrc.json 继承公共文件,类似
eslint nodejs-api :
node-notifier:
你可能感兴趣的文章
3 收藏,475
1 收藏,151
26 收藏,563
本文隶属于专栏
一个前端小司机的吟唱
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要举报该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知}

我要回帖

更多关于 webstorm eslint配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信