oyps

oyps

V2EX 第 653594 号会员,加入于 2023-10-08 04:24:40 +08:00
今日活跃度排名 4070
根据 oyps 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
oyps 最近回复了
19 天前
回复了 oyps 创建的主题 程序员 遇到一个神奇的 Bug
我大致解决了这个问题,首先 concurrently 是基于 child_process.spawn 的,我测试发现,在 Windows 环境下,spawn 方法执行 tsx watch xxx.ts ( ts 文件导入了 mysql2 包)无法监听到 stdout 和 stderr 的任何输出,原因是 tsx watch 是基于类似 Scanner 实现的,也就是在每次 TS 文件刷新后,通过等待用户输入来使终端不结束,而 spawn 或者说 concurrently 默认情况不会将子进程( tsx watch )的输入输出进行 ignore ,所以只要在 spawn 调用时,将子进程的 stdio 数组中的第一项设置为 ignore 就可以解决该问题。

所以这算是谁的问题呢,我认为应该算是 tsx 的问题,tsx watch 处于等待文件更新状态时,终端看上去是出于阻塞状态的,但是此时直接输入字符串,按下回车,是会触发交互的( vite 就不会,终端阻塞后,后续输入字符串,按下回车不会有反应)。
20 天前
回复了 oyps 创建的主题 程序员 遇到一个神奇的 Bug
[卡住无输出] concurrently "tsx watch main.ts"

[正常输出] concurrently "bun --hot main.ts"


1. 为什么 bun --hot 正常,tsx watch 不正常,是 tsx 的问题?
2. 为什么 concurrently 加 --raw 正常,不加不正常,是 concurrently 还是 tsx 问题?
3. 为什么 mysql2 不正常,但是 mysql 却正常,是 mysql2 的问题?
4. 我尝试将 tsx watch 的输出转发到文件,然后用 Hex 查看,发现不管有没有 mysql2 ,输出内容都是一样的
5. 猜测:mysql2 包对程序的输出方式做了某种改变,这种改变,经过 tsx watch 输出后无法被 concurrently 等待到输出,而 bun --hot 则应该是同一了输出方式,而无视 mysql2 对终端输出方式的改变
20 天前
回复了 oyps 创建的主题 程序员 遇到一个神奇的 Bug
下面的代码,通过 concurrently "tsx watch xxx.ts" 执行:

------------------------------------------------------------------------------------
[卡住无输出] import { createConnection } from 'mysql2/promise'
[卡住无输出] import { createConnection } from 'mysql2'

------------------------------------------------------------------------------------
[正常输出] import { createConnection } from 'mysql'
@houzhenhong 是的,proxy 的定义来自 @types/bun ,应该是 Bun 特有的。

昨天我就翻遍了 bun issue ,实在是没找到有用的解决办法,所以来 V2EX 问问大佬们。

目前看来,还是等官方更新吧,目前先用 TSX 代替使用。

项目要求必须使用到 Proxy ,所以真的没办法,折腾了好久,心累。
@lisxour 我分析了一下,只要我设置了代理,不管是什么编程语言,都无法通过 TLS 证书校验,必须要忽略证书错误才可以正常响应,我试了一下,不管是 Clash 还是 Reqable 的证书,都不能通过校验。所以尝试着让证书通过校验是行不通了,那就只能忽略证书错误,现在的问题就是,不管是 Node.js 、Deno 、Java 、Python 、PHP ,都能成功忽略掉证书错误,只有 Bun ,不管怎么设置,用隧道,用 NODE_TLS_REJECT_UNAUTHORIZED=0 ,用 Agent.rejectUnauthorized=false ,Bun 遇到证书错误,还是会继续报错,根本无法绕过证书验证。
@lisxour 下面的这段代码,"type": "module",用 node 去执行能正常响应,用 bun 执行,完全卡住

```js
import axios from 'axios'
import { HttpsProxyAgent } from 'https-proxy-agent'

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
axios.defaults.httpsAgent = new HttpsProxyAgent('http://192.168.119.242:9000')
await axios.get('https://www.youtube.com')
.then(res => console.log(res.data))
.catch(console.log)
```

30 秒视频展示: https://files.imdodo.com/dodo/3b7afca812bbdc61cdc13ca1a7058108.mp4
@codehz 一个是用原生的 fetch 请求的,走代理请求 https 返回 200 Connection established 而不是 200 OK
然后我用 axios 去请求试试,也是设置代理,然后发现返回 unable to get issuer certificate ,这就搞不明白了


@ysc3839 抓了,用原生 fetch 走 proxy 去请求 https 时,会先发起一个 CONNECT ,如下:
CONNECT / HTTP/1.1
Host: www.iuroc.com:443
Proxy-Connection: Keep-Alive
23 天前
回复了 xiaomayi000 创建的主题 Android android 上有什么好用的 epub 阅读器?
超星学习通[狗头]
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 23:25 · PVG 07:25 · LAX 16:25 · JFK 19:25
Developed with CodeLauncher
♥ Do have faith in what you're doing.