vscode plugin development
plugin 开发使用 yo 开发 下面是 package.json 中比较重要的两个字段 1. activationEvents 字段: 事件注册:activationEvents 就像是 事件监听器,它定义了插件 何时启动,即 何时满足某个条件时,启动插件。 它是一个 激活条件的注册,当符合某个条件时(例如打开特定类型的文件、执行特定的命令等),插件才会 被激活 和 加载。 总结:它控制 插件的加载时机,就像在事件驱动编程中注册事件一样。只有当事件发生时,插件才会被启动。 例子: 1234"activationEvents": [ "onLanguage:python", // 只有当打开 Python 文件时,插件才会激活 "onCommand:extension.sayHello" // 只有当执行某个命令时,插件才会激活] 2. contributes 字段: 提供功能:contributes 定义了 插件提供的功能,它声明了插件会向 VSCode 编辑器 贡献哪些服务,例如命令、快捷键、视图、语...
23种设计模式
23种设计模式是《设计模式:可复用面向对象软件的基础》一书中总结的经典设计模式,按其用途和结构大致分为三类:创建型、结构型、行为型。下面是每种模式的简介: 创建型(Creational Patterns) 单例模式 (Singleton)保证一个类只有一个实例,并提供全局访问点。 工厂方法模式 (Factory Method)定义一个创建对象的接口,但由子类决定要实例化哪个类。 抽象工厂模式 (Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。 建造者模式 (Builder)使用多个简单的对象一步步构建一个复杂的对象。 原型模式 (Prototype)通过复制现有的实例来创建新的对象,而不是通过构造函数实例化。 结构型(Structural Patterns) 适配器模式 (Adapter)将一个类的接口转换成客户希望的另一种接口。 桥接模式 (Bridge)将抽象部分与实现部分分离,使它们可以独立地变化。 组合模式 (Composite)将对象组合成树形结构来表示“部分-整体”的层次结构。 装饰器模式 (Decor...
JavaScript 拖放 API
一、核心概念1. 拖放三要素 拖动的元素:被拖拽的物品 待传输的数据:通过 DataTransfer 传递 放置目标:可放置的区域 2. 重要特性 拖拽过程中,原始元素保持原位不动 浏览器创建半透明幽灵图像跟随鼠标 所有业务逻辑都需要手动实现 二、事件系统事件流程1dragstart → drag → dragenter → dragover → dragleave → drop → dragend 事件详解 事件 触发元素 作用 dragstart 可拖动元素 设置拖拽数据和权限 drag 可拖动元素 拖拽过程中连续触发 dragenter 目标元素 第一次进入目标边界 dragover 目标元素 在目标边界内移动 dragleave 目标元素 离开目标边界 drop 目标元素 在目标上释放 dragend 可拖动元素 拖拽操作结束 三、DataTransfer 对象1. 数据操作123456789// 设置数据event.dataTransfer.setData("text/plain", "数据内容&...
Pointer-events
CSS 的 pointer-events 属性pointer-events 属性 决定了某个图形元素(如 HTML 元素、SVG 图形等)是否能够成为鼠标事件(比如点击、悬停等)的目标(target),以及在什么情况下它会成为目标 鼠标事件(如点击、悬停等)是有目标的,目标就是接收到该事件的元素。例如,点击一个按钮时,按钮就是鼠标事件的目标。 简单来说,pointer-events 用来控制哪些元素可以响应鼠标事件,哪些元素会忽略这些事件。当你点击页面上的某个元素时,浏览器会根据 pointer-events 属性来判断是否将鼠标事件传递给该元素 pointer-events 属性的常用值 auto:默认值,元素可以成为鼠标事件的目标。 none:元素不能成为鼠标事件的目标,鼠标事件会穿透该元素,继续传递给元素后面的元素。 …
关于项目管理混乱的解决方案
问题描述1. 版本兼容问题 项目多,迭代快,版本更新时,老版本不兼容。 2. 数据一致性差 新旧版本数据处理不一致,导致数据不一致。 3. 环境变量管理混乱 环境配置复杂,跨环境管理困难。 4. 平滑部署 部署新版本时,如何不影响旧版本。
服务注册和服务发现
在传统的单体应用中,服务和它们的依赖通常是静态的,地址和端口是固定的,因此配置文件里可以硬编码这些信息。而在微服务架构中,服务是动态变化的,服务的实例数量、地址、端口等都会随时变化。因此,如果依赖于硬编码的服务地址,维护起来将变得非常复杂,尤其是在面对横向扩展、服务实例崩溃或升级时,如何动态地更新服务地址变得至关重要。 服务注册和服务发现的核心目标是: 自动化管理服务实例的地址和端口: 微服务架构中的服务通常会不断增加或减少,且它们可能会随时在不同的机器或容器中启动或停止。手动更新这些服务的地址在配置文件中是非常繁琐的。 服务注册:当一个服务启动时,它会自动将自己的信息(如服务名、IP 地址、端口等)注册到服务注册中心。 服务发现:当其他服务需要调用该服务时,它们可以从服务注册中心动态查询到目标服务的地址,而不需要事先在配置文件中硬编码这些地址。 动态发现服务而不依赖固定的配置文件: 在服务注册和服务发现机制下,服务之间的调用不需要依赖固定的 IP 地址或端口。相反,服务会注册到一个中央服务注册中心,其他服务可以通过注册中心查询到该服务的最新地址。 例如,在一个微服务系统...
JavaScript history 浏览器会话历史记录
1. 核心定义 浏览器会话历史记录:指在一个浏览器标签页中,从打开到关闭期间访问的所有网页形成的有序序列。 生命周期:与标签页绑定,关闭标签页即销毁。 核心功能:实现「前进」、「后退」导航。 2. 关键区分 概念 会话历史记录 浏览器历史记录 范围 当前标签页的单次会话 所有会话的长期记录 持久性 临时,关闭标签页即消失 永久,直到手动删除 查看方式 通过「前进/后退」按钮 通过 Ctrl+H (历史记录页) 数据性质 导航栈,存储在浏览器内核 URL 集合,存储在硬盘 3. 技术实现:History APIwindow.history 是操作会话历史记录的接口 核心方法:12345678// 导航history.back(); // 后退 ←history.forward(); // 前进 →history.go(-2); // 跳转指定步数// 添加/修改记录history.pushState(state, title, url); // 添加新记录history.replaceState(state, title, url); // 替...
自动部署
需求整理 1. GitHub 推送触发 任务: 在 GitHub 上推送代码后触发自动部署流程。 实现: 配置 GitHub Actions 或 Webhook,将代码推送到 GitHub 后,自动触发 Docker 镜像构建并上传。 子任务: 配置 GitHub Actions 或 Webhook 来监听推送。 设置合适的触发条件,如推送到 main 分支。 2. 创建触发接口(API) 任务: 编写一个 API 接口,用于手动触发 Docker 打包过程。 实现: 使用如 Flask(Python)或 Express(Node.js)等 Web 框架创建一个 API,能够接受请求并启动 Docker 打包流程。 子任务: 创建一个 POST 接口,接收构建请求。 接口实现调用 Docker 构建命令(docker build)并返回构建状态。 3. 构建 Docker 镜像 任务: 编写 Dockerfile 并通过接口触发构建。 实现: 在构建服务器上执行 Docker 构建,生成目标镜像。 子任务: 确定 Dockerfile 配置,确保包含...
JavaScript 同源策略
🎯 核心概念同源策略是浏览器的安全基石,像小区的围墙,默认隔离不同来源的资源,保护用户数据不被恶意网站窃取。 什么是“同源”?三要素必须完全一致: 协议(http / https) 域名(www.example.com) 端口(80 / 443) ⚡ 关键机制判断时机:实时检查同源判断发生在敏感操作执行的瞬间,不是预先分类: 12345678// 示例1:网络请求fetch("https://api.other-site.com/data"); // ⚠️ 在此刻判断!// 示例2:DOM访问iframe.contentDocument; // ⚠️ 在此刻判断!// 示例3:存储访问localStorage.getItem("key"); // 自动关联当前源 重要特性:脚本继承源12<!-- 在 https://my-site.com 中 --><script src="https://cdn.other-site.com/library.js"></scri...