背景
项目为了统一管理localStorage和sessionStorage,使用了统一的方法对Storage进行存取.为限制项目成员直接使用localStorage
和sessionStorage
,需要通过eslint对直接引用的形式加以限制
方案一 使用eslint的开放性禁用规则no-restricted-syntax
修改文件.eslintrc
,如下
module.exports = {
rules:{
'no-restricted-syntax': [
'error',
{
selector: "CallExpression[callee.object.name='localStorage']",
message: '项目中不允许直接使用`localStorage` , 请使用utils中的storage来替代',
},
{
selector: "CallExpression[callee.object.name='sessionStorage']",
message: '项目中不允许直接使用`sessionStorage` , 请使用utils中的storage来替代',
},
{
selector: "CallExpression[callee.object.object.name='window'][callee.object.property.name='localStorage']",
message: '项目中不允许直接使用`localStorage` , 请使用utils中的storage来替代',
},
{
selector: "CallExpression[callee.object.object.name='window'][callee.object.property.name='sessionStorage']",
message: '项目中不允许直接使用`sessionStorage` , 请使用utils中的storage来替代',
},
],
}
}
效果如下:
方案 二 自行开发eslint插件
略微麻烦,需要一定学习成本(要熟悉eslint插件开发的一些语法)和使用成本(要发布到npm);但是完全自定义,适合比较复杂的校验