
Deno 在 Windows 平台下 prompt() 默认限制输入 255 字符,这是已知 Bug;本文提供无需依赖、兼容性好且零配置的替代实现方案。
deno 在 windows 平台下 `prompt()` 默认限制输入 255 字符,这是已知 bug;本文提供无需依赖、兼容性好且零配置的替代实现方案。
在 Deno v1.34–v1.42(含)的 Windows 版本中,内置 prompt() 函数存在底层读取缓冲区截断问题,导致用户输入超过 255 字符时被无声截断——这对需要粘贴 JSON、配置片段或长文本的 CLI 工具极为不利。该问题已在 Deno Issue #19010 中确认为 Windows 特定缺陷,非设计行为,也非安全策略限制,因此无需降级或规避安全模型。
幸运的是,我们可完全绕过 prompt(),用 Deno 原生 I/O API 构建一个功能等价、无长度限制的替代函数。以下是一个轻量、稳定、零外部依赖的实现:
import { readLines } from "https://deno.land/std@0.224.0/io/mod.ts";
async function prompt(promptText: string): Promise<string> {
const encoder = new TextEncoder();
Deno.writeAllSync(Deno.stdout, encoder.encode(`${promptText} `));
const lineIter = readLines(Deno.stdin);
const { value } = await lineIter.next();
return value ?? "";
}
// 使用示例:
const jsonInput = await prompt("Paste your JSON here (no 255-char limit!)");
console.log("Received:", JSON.parse(jsonInput)); // ✅ 支持任意长度 JSON✅ 关键优势说明:
- 无长度限制:基于 readLines() 流式读取,由系统终端实际缓冲能力决定(通常数万字符),远超 255;
- 零依赖:仅使用 Deno 官方标准库(std@0.224.0,兼容 v1.35+),无需安装第三方模块;
- 行为一致:保留回车确认语义,用户操作习惯无缝迁移;
- 跨平台可用:在 Windows/macOS/Linux 上均表现一致,彻底规避原生 prompt() 的平台差异。
⚠️ 注意事项:
- 请确保 Deno 运行于交互式终端(非重定向管道或 CI 环境),否则 Deno.stdin 将不可读;
- 若需支持多行输入(如带换行的 JSON),应改用 readAll() + TextDecoder,但本例聚焦单行场景下的简洁替代;
- 建议将上述 prompt 函数封装为工具函数或小型 util 模块,便于项目复用。
待 Deno 官方修复该 Windows 读取缺陷后,可平滑切换回原生 prompt()。在此之前,此方案是兼顾健壮性、简洁性与专业性的最佳实践。










