eslint从入门到放弃(二)esLint配置之globals

上文说了eslint入门,今天说下ESLint配置中的globals
前文传送门,eslint从入门到放弃(一)eslint入门

大家好我是【小枫学幽默】,这是我eslint从入门到放弃系列教程的第二篇,欢迎关注后续更新。接下来步入正题:

ESLint配置之globals

ESLint globals 是个啥?这玩意儿有啥用?

globals是个啥前,我们先走个例子:

首先eslint有一条规则(no-undef)是不允许使用未定义的变量,在eslint 检测代码的时候会报错,来,跟着步骤走

让我们先新建一个demo目录,文件结构如下

demo
├── .DS_Store
├── .eslintrc.js
└── globals.js

.eslintrc(eslint配置文件),规则中配置不允许使用未定义的变量,内容如下

module.exports = {
    "rules": {
        // 这个规则告诉eslint,代码中出现使用未定义的变量时,给出错误提示
        "no-undef": "error",
    }
}

globals.js(我们要用eslint校验的文件)

我们假设globals.js运行在微信小程序环境下

// 调用微信小程序的网络请求api
wx.request({
    url: 'example.php', //仅为示例,并非真实的接口地址
    data: {
        x: '',
        y: ''
    },
    header: {
        'content-type': 'application/json' // 默认值
    },
    success: function (res) {
    }
})
request.get()

打开命令行,进入demo目录,用eslint校验下globals.js

npx eslint globals.js -c .eslintrc.js
/demo/globals.js
   2:1  error  'wx' is not defined       no-undef
  13:1  error  'request' is not defined  no-undef

我和ESlint的对话

eslint:『喏~ 主人,你看wxrequest 未定义哦!』

来…让我们看下这个文件内容,wxrequest确实没有定义就直接使用了,这段代码在微信小程序的运行环境中,wx这两个变量会由微信小程序的代码执行容器自动注入,只有request会报错,eslint识别出了有安全隐患的代码。

内心我是知道这段代码在微信小程序环境中运行的时候,wx.request绝对可以直接调用,但是作为一个处女座前端bug攻城狮,怎么忍受有个报错存在(嘿嘿嘿【手动坏笑】)

那么关键就是,怎么让eslint知道,这个变量肯定是会存在的呢?

eslint悄悄说:『Hi~ 主人,你只要在.eslintrcglobals选项中告诉我,这个是全局变量就可以啦!!』

:『多嘴…答案是通过eslintglobals的配置项,显式的告诉它,嗨~ 哥们儿wx是全局变量,运行时一定会存在,不用报错哦!!』

实操:修改 .eslintrc(eslint配置文件)内容如下

module.exports = {
    // 配置上 globals 把wx、console 定义为全局变量
    globals: {
        wx: 'readonly', // 微信小程序
    },
    "rules": {
        "no-undef": "error",
    }
}

再校验下

npx eslint globals.js -c .eslintrc.js
/demo/globals.js
  13:1  error  'request' is not defined  no-undef

你看已经不报wx 未定义了,如果你希望request也不报错,需要把request也配置在globals对象中(前提是你必须知道你在做什么,一旦这么设置request即使是未定义,eslint也不会给出错误提示),如果运行时,发现这个request不存在,代码就出bug咯(撒花)

module.exports = {
    "rules": {
        "no-undef": "error"
    },
    globals: {
        // 微信小程序
        wx: 'readonly', 
        // 告诉eslint代码运行时这个变量一定存在
        request: 'readonly', 
    }
}

配置globals的两种方式

注释方式定义全局变量

/* global wx:writable, request:writable */
// 调用微信小程序的网络请求api
wx.request({
    url: 'example.php', //仅为示例,并非真实的接口地址
    data: {
        x: '',
        y: ''
    },
    header: {
        'content-type': 'application/json' // 默认值
    },
    success: function (res) {}
})
request.get()

配置文件方式定义全局变量

module.exports = {
    "rules": {
        "no-undef": "error"
    },
    globals: {
        // 微信小程序 设置值为writable让wx可被重写
        wx: 'writable',
        // 告诉eslint代码运行时这个变量一定存在设置值为writable让request可被重写
        request: 'writable',
    }
}

如果你觉得全局变量wx重写会有风险,你可以通过以下方式告诉eslint,不允许修改全局变量

/* global wx:readonly, request:readonly */
/*eslint no-global-assign: "error"*/

// OR

module.exports = {
    "rules": {
        "no-undef": "error",
        "no-global-assign": ["error"]
    },
    globals: {
        // 微信小程序 设置值为writable让wx可被重写
        wx: 'readonly',
        // 告诉eslint代码运行时这个变量一定存在设置值为writable让request可被重写
        request: 'readonly',
    }
}

注意:要启用no-global-assign规则来禁止对只读的全局变量进行修改。

总结

.eslintrc.js中的globals是,ESlint提供的,让用户来定制脚本在执行期间访问的额外的全局变量,定制后,ESlint将会根据globals中定义的全局变量及对应的属性值,来检查代码中的问题。

globals中变量对应值的说明:

readonly 表示变量只可读不可写;(旧版本中会使用false/readable,与readonly等价)
writable 表示变量可读可写;(旧版本中会使用true/writeable,与writable等价)
off 表示禁用全局变量;

欢迎关注我的个人公众号「「小枫学幽默」」一起成长,一起分享生活!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值