- 博客(286)
- 收藏
- 关注
原创 网络与请求级错误
在实际开发中,可以通过检查error// 1. 服务器响应了,但状态码不是 2xxconsole.log('HTTP 错误:', error.response.status);if (error.response.status === 401) { /* 跳转登录 */ }if (error.response.status === 502) { /* 提示服务暂时不可用 */ }// 2. 请求已发出,但没有收到响应 (网络层错误)console.log('网络错误:', error.code)
2026-08-10 10:37:15
302
原创 部署python后端,以及Dockerfile 的 RUN CMD ENTRYPOINT字段
装环境、配系统、下依赖-> 必须用RUN(在 build 阶段固化到镜像里)。启动你的 Python 业务进程-> 必须用CMD或ENTRYPOINT(在 run 阶段作为容器的主进程)。**在更高级的 Dockerfile 编写中,经常会看到ENTRYPOINT指令。如果镜像里同时存在ENTRYPOINT和CMDENTRYPOINT是核心启动程序(一般不轻易被覆盖)。CMD会变成传给ENTRYPOINT的默认参数。当你docker run时,实际执行的是。如果你运行,它执行的就是。
2026-05-15 17:43:46
890
原创 turborepo-2
这就是一个映射关系。你在pipeline里写的键(Key),就是为了“拦截”并“配置”同名的 npm script 运行时的行为(比如缓存什么、依赖谁)。它本身没有任何魔法,名字完全由你决定。如果我有几个 子包,都靠build 来构建自己的产物,而且互相可能依赖对方的产物,turporepo会自动分析他们打包的先后顺序吗,这就是turporepo的典型用法吧对!完全正确!你完全抓住了 Turborepo 的核心灵魂!
2026-04-01 13:22:44
393
原创 turborepo
你看到的是一段构建编排与缓存策略的配置。如果在你的项目里看到了它,说明你的团队正在使用 Turborepo 来管理大型前端仓库,极大地加快了 npm install 和打包构建的速度。判断是否打包,靠的是源代码的 Hash(有没有改代码)。outputs的作用,是告诉工具:打包完该备份哪些文件夹;命中缓存时该还原哪些文件夹。
2026-04-01 09:15:55
403
原创 #!/usr/bin/env node 和 #!/usr/sh 什么区别
写法解释器适用代码兼容性Node.jsJavaScript最佳(自动查找路径)/bin/shShell (sh)Shell 命令标准(系统自带)/bin/bashBash ShellShell 命令更好功能的 ShellPythonPython 代码也是一种常见用法回到你的问题你想写一个类似的工具,本质上是在写Node.js 程序。所以你应该使用:#!:靠 npm 生成的.cmd.ps1脚本“硬调用” Node.js,忽略 Shebang。:直接读取 Shebang (
2026-02-24 10:08:13
1031
原创 关于迭代协议:可迭代协议和迭代器协议,生成器函数 生成器对象的理解
你的理解可以打100分。协议层:规定了和next()的接口标准。实现层:可以通过让一个对象既是迭代器又是可迭代对象。语法糖层:**生成器(Generator)**就是官方提供的、能自动同时实现上述两层协议的完美工具,专门用来方便地编写。
2026-01-09 11:22:22
448
原创 web请求 错误拦截
错误:1、有响应http错误 2、无响应的网络错误 防火墙等。当error.code存在(如等)时,通常。防火墙导致连接失败ETIMEDOUTECONNRESET// 连接建立后被异常中断// 1. 防火墙/安全组阻断// 服务器防火墙主动断开连接// 云服务商安全组规则限制// 2. 代理服务器中断// 代理服务器配置问题或故障// 3. 服务器进程崩溃// 后端服务突然停止// 情况1:服务器返回了HTTP错误状态码。
2025-12-25 14:34:02
1288
原创 typescript - TypeScript 全局类型扩展的三个不同层面
globalThisglobalThis是 JavaScript 中访问全局对象的标准化方式,无论代码在什么环境下运行。
2025-12-04 16:43:51
353
原创 typescript - 扩展全局属性
问题:类型“Window & typeof globalThis”上不存在属性“my”但是d.ts已经加了不加 export {} 扩展不了window吗?答案:// global.d.ts(全局声明文件)my: string;// ❌ 这个扩展实际上不会生效!// 没有 export {},这是一个全局声明文件。
2025-12-04 10:58:30
637
原创 FileFieldsInterceptor 和 UploadedFiles + ParseFilePipe 的区别
回答你的问题:从技术上讲,如果的 options 已经满足了所有验证需求,可以不用。但在生产环境中推荐结合使用安全考虑拦截危险文件用户体验提供更好的错误信息代码可维护性:业务验证逻辑更清晰功能完整性:两者验证的侧重点不同所以,虽然可以不用,但结合使用能获得更好的安全性和用户体验。很好的问题!确实的 options 里也有验证功能,但通常还是需要结合回答你的问题:从技术上讲,如果的 options 已经满足了所有验证需求,可以不用。但在生产环境中推荐结合使用安全考虑拦截危险文件用户体验。
2025-10-11 16:22:47
1076
原创 node: process.cwd() 和 __dirname 、path.resolve
【代码】node: process.cwd() 和 __dirname 、path.resolve。
2025-10-10 11:22:42
216
原创 typeRoots types include 的区别
作用:指定 TypeScript 编译器应该在哪些目录下查找全局的类型定义文件(如*.d.ts默认值(如果你不设置typeRoots,编译器默认只去这个目录找)。当你设置它时:你覆盖了默认值。这意味着编译器只会去你列出的目录中查找类型定义,而不再去默认的。所以通常你会把默认路径也加上。示例:{"node_modules/@types", // 保留默认路径,查找第三方库的类型"types" // 新增自定义路径,查找你自己的全局类型现在,编译器会去。
2025-09-03 15:56:20
770
原创 vue3 使用css变量
缺点:用完 v-bind('响应式变量后') 会在每一个元素加这个键名,而自定义的变量不会。只能包含字母、数字、连字符(-)和下划线(_),不能包含空格或其他特殊字符。可以使用驼峰或连字符风格,但推荐连字符风格(如。区分大小写,但建议全部小写,便于统一管理。
2025-09-03 11:01:31
452
原创 浏览器和 node 操作文件的 api 以及区别
特性浏览器 (Web API)Node.js (fsmodule)核心对象FileBlobBufferStream主要读取器FileReader主要写入器下载 (权限受限制,需用户触发完全访问操作方式异步 (事件回调或 Promise)同步、回调、Promise 三种风格主要用途上传前处理、图片预览、客户端日志等服务器端任何文件 I/O,如读写配置、日志、用户上传的文件存储等流支持一般通过一流的Stream支持,性能极高在浏览器中,你是客人,需要主人的许可才能看或动房间里的东西(文件)。
2025-08-31 10:01:15
449
原创 cross-env dotenv
cross-env 搭配 dotenv 使用的原理: 1、cross-env aa=11 bb=22 NODE_ENV=development node my.js 执行时 aa bb 对应的 值会注入环境变量 , node 里面 process.env 可以访问到,此时 process.env.NODE_ENV = development;
2025-08-09 23:13:55
285
原创 Blob File Buffer ArrayBuffer uint8Array DataView 的关联
const arrayBuffer = new ArrayBuffer(16) //固定长度的原始二进制缓冲区,不能直接操作,需要使用【视图】 如 TypedArray 和 DataView。TypedArray 家族包括 Uint8Array Int8Array Uint16Array Int16Array 等。buffer 是对 Unit8Array 的子类、专为I/O优化,ArrayBuffer 二进制数据的基石。from(可以是TypedArray等)
2025-08-08 17:06:01
254
原创 webapck 配置 configerWebpack chainWepack
非常好的问题!让我结合您的代码来详细解释 和 的区别,以及它们作为函数和对象的不同用法。特点:特点:您的代码中 的使用非常典型:4. 关键 API 解释 中的核心方法:: 选择或创建一个模块规则: 添加或选择一个 loader: 选择一个插件: 最重要的方法,用于修改现有配置: 在指定 loader 之前插入: 返回上一级配置对象 方法详解:5. 实际应用场景对比使用 的场景:使用 的场景:6. 您代码中的最佳实践您的配置很好地展示了两者的配合使用:这种组
2025-08-06 15:58:36
1146
原创 http触发预检请求条件
/ 任何自定义头部都会触发预检headers: {'X-Custom-Header': 'value', // 自定义头部'Authorization': 'Bearer token', // 认证头部});
2025-07-30 09:52:33
429
原创 html 之 filedSet标签
fieldset 可以在 HTML 结构上与 form 分离,但通过。属性关联的 fieldset 中的表单控件都会被包含在提交数据中。:这种方式允许更灵活的页面布局,表单控件可以分布在页面的不同位置。属性,其中的所有表单控件都会被禁用,且不会包含在表单提交中。:如果 fieldset 设置了。:当提交表单时,所有通过。
2025-06-18 09:35:12
215
原创 MutationOberver 使用以及配置
理解这些配置项的区别可以帮助你更精确地监听所需的 DOM 变化,同时避免不必要的性能开销。这三个选项决定了观察器将监听哪些类型的 DOM 变化。:监测目标节点的直接子节点的添加、移除操作。:将观察范围扩展到目标节点的所有后代节点。:监测目标节点属性值的变化。
2025-05-13 17:09:35
657
原创 Typescript d.ts 文件作用
用于为模块(如文件类型或第三方库)提供类型定义,尤其是当模块没有自己的类型定义时。当使用没有类型定义的第三方库时,可以用。可以用来声明类型别名或接口。
2025-04-29 13:06:48
246
原创 webpack plugin
/ 使用 compiler.hooks.done.tap 注册一个钩子console.log('编译完成!');});plugins: [Loader:按相反顺序执行,从后往前。Plugin:按声明顺序执行,从前往后。使用不同的钩子:展示了如何在编译过程的不同阶段使用 Webpack 的钩子。处理异步操作:使用tapAsync钩子处理异步操作,并在操作完成后调用回调函数。错误处理:展示了如何在编译失败时处理错误。访问和修改编译资源:展示了如何通过对象访问和修改编译资源。
2024-09-03 10:22:04
1893
1
原创 webpack loader
这是因为 Webpack 的 loader 设计为链式调用,每个 loader 接受上一个 loader 的输出作为输入。最后一个 loader 处理原始资源文件,接着每个 loader 依次处理前一个 loader 的输出,直到第一个 loader。Webpack 的 loader 之所以按照相反的顺序执行,是为了实现一种链式处理的机制,每个 loader 接受上一个 loader 的输出作为输入。
2024-09-03 09:57:34
1798
原创 mysql 聚合函数 / having
与聚合函数同时出现的列,必须同时出现在 group by子句中。过滤条件中使用了聚合函数,必须用having 替换where。
2024-08-29 16:32:31
320
原创 MYSQL -NATURAL JOIN ,单行函数
是一种 SQL 连接类型,它会自动基于两个表中具有相同名称的列进行连接。使用 NATURAL JOIN时,不需要显式指定连接条件。它会帮你自动查询两张连接表中所有相同的字段,然后进行等值连接关键字可以直接在 WHERE子句后面使用,不需要加限定词。在这个查询中,EXISTS子句检查子查询是否返回至少一行数据。如果子查询返回至少一行数据,则EXISTS返回TRUE,否则返回FALSE。
2024-08-23 17:35:53
491
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅