eslint从入门到放弃(三)ESLint配置之env

上文说了esLint配置之globals,今天说下ESLint配置中的env,前文传送门,

eslint从入门到放弃(一)eslint入门

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

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

ESLint配置之env

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

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

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

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

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

.eslintrc(eslint配置文件)内容如下

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

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

window.test = "123"
console.log(111)
function add (a, b) {
    // c 是未定义的
    return a + b + c
}
add(1, 2)

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

npx eslint env.js -c .eslintrc.js
/Users/baymax/Desktop/workspace/note-repo/eslint/eslint配置之env/demo/env.js
  1:1   error  'window' is not defined   no-undef
  2:1   error  'console' is not defined  no-undef
  4:20  error  'c' is not defined        no-undef

ESlint 和我的对话,发现问题

ESlint看了上面的报错后发生了一下对话:

ESlint:『windowconsolec 未定义啊,主人,此处有bug!!!』

:『嗯…有bug不怕,作为前端bug攻城狮的我,不就是为bug而生的嘛。放开那段代码,让我来!!!!』

我抿嘴一笑,然后放眼朝着代码看过来,一看不打紧,越看越觉得奇怪,嗯?总觉得哪里不对!

我抬起眼注视着eslint说:『角豆麻袋…老哥,c 未定义我能理解,因为确实在add函数上下文里面没定义,就直接使用了。你说你告诉我windowconsole这两个未定义是几个意思?这俩明明全局变量,怎么会能是未定义呢?!!老哥,你一定是在逗我!!!』

ESlint:『主人,你看这个文件内容,windowconsole定义了么?是吧,没定义就直接使用了吧,你觉得windowconsole这两个变量可以用,是因为你潜意识默认这个代码是运行在浏览器环境,然而如果这段代码是运行在node环境呢?这段代码会报错的,所以我(eslint)其实并不假设你代码的运行环境,换句话说我不知道你的将要运行的环境,我只是做了根据你设置的规则校验代码的工作。(手动摊手>_<)』

我:『也对』嘿嘿,上节课我学了globals点击回顾),这次正好派上用场,直接把windowconsole,加入globals里面不就行了,忍不住给我的机智点赞!!o( ̄▽ ̄)d

解决问题

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

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

再校验下

npx eslint env.js -c .eslintrc.js
 /demo/env.js
  5:20  error  'c' is not defined  no-undef

你看已经不报windowconsole 未定义了

引出env,原来隐藏大招是它

Wait a minute… 浏览器/node环境下有很多全局变量是直接可以用的(比如window/console/global/navigator),这么多,难不成我要一个一个定义?想想都觉得麻烦,天啊,我怎么保住我的头发!!!

不不不,eslint 想到了这一点,所以提供了env这个配置项指定你的环境变量,当你开启了对应的环境,eslint就会自动预定义,检测代码时,就避免了报错。上面env.js中我们使用了windowconsole这两个全局变量,这两个变量是在浏览器环境直接可以用的,那我们配置下envbrowser就可以了

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

module.exports = {
    env: {
        browser: true,
    },
    "rules": {
        "no-undef": "error",
    }
}

每个env对应的全局变量

找了找eslint的源码,其实里面调用的是globals 附上:源码地址

具体定义参看globals

欢迎关注我的个人公众号「「小枫学幽默」」一起成长,一起分享生活!!

扫码关注我.png

附录:所有可用的env

browser - 浏览器环境中的全局变量。

node - Node.js 全局变量和 Node.js 作用域。

commonjs - CommonJS 全局变量和 CommonJS 作用域 (用于 Browserify/WebPack 打包的只在浏览器中运行的代码)。

shared-node-browser - Node.js 和 Browser 通用全局变量。

es6 - 启用除了 modules 以外的所有 ECMAScript 6 特性(该选项会自动设置 ecmaVersion 解析器选项为 6)。

worker - Web Workers 全局变量。

amd - 将 require() 和 define() 定义为像 amd 一样的全局变量。

mocha - 添加所有的 Mocha 测试全局变量。

jasmine - 添加所有的 Jasmine 版本 1.3 和 2.0 的测试全局变量。

jest - Jest 全局变量。

phantomjs - PhantomJS 全局变量。

protractor - Protractor 全局变量。

qunit - QUnit 全局变量。

jquery - jQuery 全局变量。

prototypejs - Prototype.js 全局变量。

shelljs - ShellJS 全局变量。

meteor - Meteor 全局变量。

mongo - MongoDB 全局变量。

applescript - AppleScript 全局变量。

nashorn - Java 8 Nashorn 全局变量。

serviceworker - Service Worker 全局变量。

atomtest - Atom 测试全局变量。

embertest - Ember 测试全局变量。

webextensions - WebExtensions 全局变量。

greasemonkey - GreaseMonkey 全局变量。

这些环境并不是互斥的,所以你可以同时定义多个。如同时这是node 和 browser

module.exports = {
    env: {
        browser: true,
        node: true,
    },
    "rules": {
        "no-undef": "error",
    }
}
### ESLint入门教程 #### 什么是Lint和ESLint? Lint是一类工具的总称,这类工具主要用于检测程序源代码中的语法错误以及编程缺陷等问题[^2]。而ESLint则是针对JavaScript的一种Lint工具,能够帮助开发者识别并修复代码中的潜在问题。 #### 如何安装与配置ESLint? 为了在项目中应用ESLint,需先全局或局部安装该软件包: ```bash npm install eslint --save-dev ``` 接着初始化配置文件`.eslintrc.js`: ```javascript module.exports = { "env": { "browser": true, "es6": true }, "extends": "eslint:recommended", "rules": {} }; ``` 这段脚本定义了一个基本环境设置,并继承官方推荐规则集[^1]。 #### 使用过程中的常见误区 初次接触者往往试图完全掌握官方文档每一个细节,实际上这是不必要的。重要的是理解如何根据实际需求调整配置项,在具体场景下合理运用这一工具即可达到预期效果。 #### 遇到的具体难题及其应对策略 当尝试安装ESLint及相关依赖时可能会碰到权限不足的问题。此时可以考虑采用如下方法解决: - 更改当前工作目录下的node_modules访问权限; - 或者切换至具备管理员身份的命令提示符窗口重试操作; - 还可以选择使用nvm管理不同版本Node.js环境来规避此类冲突[^3]。 另外值得注意的一点是在学习初期不必过分纠结于某些高级特性,随着经验积累自然会逐渐熟悉这些功能的应用场合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值