首页 > 其他分享 >【eslint 插件开发】禁用 location 跳转外部链接

【eslint 插件开发】禁用 location 跳转外部链接

时间:2023-02-17 18:24:32浏览次数:55  
标签:node 插件 www location 跳转 eslint

背景

公司 h5 项目需要为跳转的外部链接统一增加参数。举个例子,假设有如下代码:

location.href = 'https://www.test.com/a?id=xxx'
location.replace('https://www.test.com/a?id=xxx')

我们需要把所有链接都增加参数uid:

location.href = 'https://www.test.com/a?id=xxx&uid=someuid'
location.replace('https://www.test.com/a?id=xxx&uid=someuid')

需求分析

使用函数统一跳转逻辑

方便维护和更新,我们需要使用函数来统一跳转逻辑。

// 直接跳转
location.href = 'abc' 转化为 navigateTo('abc')
location.replace('abc') 转化为 redirectTo('abc')

虽然可以查找整个项目进行手动替换,但多个项目的人工操作,显然是费时费力的。

禁止后续提交使用 location 跳转

当我们完成当前代码的替换后,还需要防止其他人使用 location 进行跳转。一个基本事实是,无法用人工监督来杜绝这个行为(或者说可以监督但成本太高)。

使用 eslint 插件,自定义错误规则和修复程序,可以完美解决这两个问题。

创建插件 eslint-plugin-huoli

如果首次创建插件,建议先阅读官方文档Create Plugins

或者参考我的项目eslint-plugin-huoli

插件的写法很简单,就是针对某个 AST 节点类型进行处理。你可以在ast 官网查看某条代码对应的 AST 数据结构和节点类型。

注意点

遍历节点时机:enter、exit

可能大家更熟悉 babel 插件,了解遍历 AST 节点有两个时机:进入和退出:

module.exports = {
  ...
  AssignmentExpression: {
    enter: node => {},
    exit: node => {},
  }
}

eslint 也有一样,不过写法略有不同:

module.exports = {
  ...
  AssignmentExpression() {},
  'AssignmentExpression:exit'(node) {},
}

如何调试插件

开发插件过程中,如果能轻松的进行 debug 会极大提升开发效率。参考eslint-plugin-huoli

首先,使用Ruletester创建测试用例。

然后,在package.json中增加脚本:

{
  scripts: {
    ...
    "debug": "node node_modules/jest/bin/jest",
  }
}

使用 vscode 进行调试

标签:node,插件,www,location,跳转,eslint
From: https://www.cnblogs.com/fayin/p/17131176.html

相关文章

  • Qt Embedded之一:简介与平台插件介绍
    常见的嵌入式Linux图形界面有Qt/Embedded、DirectFB、MicroWindows/NanoX、MiniGUI和OpenGUI等,每个GUI都有各自不同特点和应用场合,在应用编程上也各不相同。而对于......
  • odoo视图跳转流程
    引子:在学习和使用odoo过程中,习惯了点击创建就到新增页,点击编辑就能进入到详情页,点击返回就能回到列表页,那你有没有某一刻思考一下,这种页面跳转是以什么方式进行的呢,前后......
  • VS Code常用插件
    C/C++ExtensionPack:C/C++扩展包GitLensGitHistoryGitGraphDoxygenDocumentationGenerator:注释工具BetterComments:代码注释高亮BetterC++Syntax:C/C++语......
  • vue2 - 自定义插件 使用插件,scoped
    1.自定义插件myPlugin.jsexportdefault{install(Vue){console.log("Vue.use()会调用此方法",Vue)}} 2.使用插件importVuefrom'vue'importAp......
  • 插件使用
    app.vue<template><div><Student/><School></School></div></template><!--1.插件,增强vue本质:包含install的一个对象,install......
  • uni-app:页面跳转/参数的传递接收(hbuilderx 3.6.18)
    一,页面跳转与参数传递//跳转到详情页goItem:function(id,title){uni.navigateTo({url:'../item/i......
  • Jenkins的PublishOverSSH插件的Lable用法
    插件准备ParameterizedTriggerPublishOverSSH项目配置参数插件ParameterizedTrigger的配置PublishOverSSH配置常规配置如下图,总共配置了两个服务器,Labl......
  • vue标记出文本中的超链接并可以点击跳转
    <pv-html="translateHtml(item.message)"></p>methods:{//给字符串中的链接用span标签包裹起来,实现点击跳转translateHtml(msg){varreg=......
  • Cordova 使用 cordova-plugin-ble-central 蓝牙插件,实现蓝牙设备持续扫描,打印RSSI等信
    目录前言代码下载版本更新效果图完整演示动图主界面效果页核心代码index.jsindex.htnl 前言算法讲解:RSSI平面三点定位算法(C语言、JS源码例程......
  • Vue 路由跳转设置不刷新
    一、问题描述在某些情况下,vue项目前端有些情况下需要设置路由跳转,页面不刷新,比如:前进导航刷新页面,后退不刷新,page1-->page2-->page3,每次前进到一个新页面都需要获取数......