【问题标题】:'Unknown stdin file type' error in windowsWindows中的“未知标准输入文件类型”错误
【发布时间】:2016-06-19 15:02:40
【问题描述】:

我已经为这个错误苦苦挣扎了 2 天,无法理解为什么电子渲染器 process.stdin 在 Windows 操作系统中失败。

如何重现:

输入npm install devtool -g 然后输入devtool 在控制台输入process.stdin 会出现错误消息 将有两个错误,一个在第 127 行,另一个在第 128 行 C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\ node_modules\electron-prebuilt\dist\resources\atom.asar\renderer\lib\init.js(devtool update 2.x)

Error: Implement me. Unknown stdin file type!

C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\node_modules\electron-prebuilt\dist\resour…:127 Error: Implement me. Unknown stdin file type!(…)(anonymous function) @ C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\node_modules\electron-prebuilt\dist\resour…:127Module._compile @ module.js:425Module._extensions..js @ module.js:432Module.load @ module.js:356Module._load @ module.js:313Module.runMain @ module.js:457startup @ node.js:151(anonymous function) @ node.js:1007 C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\node_modules\electron-prebuilt\dist\resour…:128 Error: Implement me. Unknown stdin file type! at process.stdin (node.js:747) at hookProcess (C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\lib\preload.js:117) at C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\lib\preload.js:29 at Object.<anonymous> (C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\lib\preload.js:129) at Module._compile (module.js:425) at Object.Module._extensions..js (module.js:432) at Module.load (module.js:356) at Function.Module._load (module.js:313) at Module.require (module.js:366) at require (module.js:385)(anonymous function) @ C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\node_modules\electron-prebuilt\dist\resour…:128Module._compile @ module.js:425Module._extensions..js @ module.js:432Module.load @ module.js:356Module._load @ module.js:313Module.runMain @ module.js:457startup @ node.js:151(anonymous function) @ node.js:1007

【问题讨论】:

  • 您使用的是标准的 Windows 命令行 shell cmd.exe 吗?
  • 我已经尝试过提示,git bash 和 powershell ...

标签: node.js windows electron


【解决方案1】:

我遇到了同样的问题。

首先我认为作为 REPL 的 devtool 不需要标准输入,并且是 windows 构建中的一个简单错误。 GitHub repo 所有者修复它只是在启动时忽略标准输入,但正如您所发现的,devtool 已损坏,您无法在 windows 中使用标准输入做任何事情。

作为概念证明,我创建了一个超越 devtool REPL 的简单示例:

这段代码不起作用。

//test.js
var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: true
});

rl.on('line', function(line){
    console.log(line);
})

devtool test.js

Error: Implement me. Unknown stdin file type!

Windows 7 x64,S.O.管理员权限,Node v5.10.0,npm v3.8.3 DevTool v1.9.1。

我在你的 github 上留下了评论 issue 但已关闭,所以我打开了一个 new one

【讨论】:

  • 从 devtool 2.x 开始你需要在控制台输入process.stdin 才能看到错误。
  • 这肯定与 windows 相关,因为它不会在其他操作系统中发生......我真的认为问题出在电子
【解决方案2】:

another question 指向同样的问题。其中一个 cmets 声明它是 known iisnode issue,并且还建议通过将所有调用包装到 process.stdin 来解决问题,例如:

if(!process.env.IISNODE_VERSION) { 
    // do stuff with process.stdin 
}

这可能是一个临时解决方案。我确定你已经看过那个帖子了,你怎么看?

【讨论】:

  • iisnode 在 iis 中托管 nodejs。我不认为是相关的。
【解决方案3】:

阅读 libuv source code 这是 nodejs 用于某些低级操作的原因,似乎原因是无法专门为 windows 确定缓冲区或句柄的类型。 GetFileType 函数似乎返回了一个未知句柄。

这绝对是一个仅限于 Windows 的问题,因为确定句柄类型的库部分位于 UV 源代码的 src/win/handle.c 内,所以我认为这确实不会影响 *NIX 操作系统。

可能安装的 nodejs 版本缺少构建时选项?

【讨论】:

  • 我也结束了 'handle.c' 文件,我仍在寻找一种让它在 Windows 上工作的方法
  • @rafaelcastrocouto 问题是 GetFileType 是他们提供句柄类型所依赖的一个 Microsoft OS 函数,它返回一个未知句柄,我不是该领域的专家,但这会导致不幸的是,我认为该修复超出了您的 JS 代码中的简单黑客攻击...也许在 nodejs bugtracker 中打开了一个问题?
  • 我能问一下你为什么在windows上需要它吗?只是好奇,为什么不在 VirtualMachine 上构建它呢?最坏的情况是你可以尝试 cygwin,虽然我不确定在 cygwin 环境中构建 nodejs 会有多难。
  • 我根本不需要,我在 SO 中解决了这个问题。我真的只是想让模块在任何操作系统上都能正常工作。
【解决方案4】:

一个超级简单的解决方法是强制 devtool 在自己的控制台窗口中运行。

所以不要运行:

devtool

运行这个:

start devtool

它应该在一个新窗口中弹出,不要对输入管道感到困惑。

同样的技巧适用于很多 Node 包。

【讨论】:

    【解决方案5】:

    我在尝试从控制台窗口启动电子时遇到此错误;这很奇怪,因为它一直运行良好。我今天意识到,我唯一改变的就是从 Visual Studio Code(带有插件)启动一个终端窗口。

    如果我使用从 VS Code(终端插件)创建的终端,那么当我尝试运行 node_modules\.bin\electron 时,我会得到:

    d:\Code\Applications\Example>"node_modules\.bin\electron"
    internal/process/stdio.js:86
            throw new Error('Implement me. Unknown stdin file type!');
            ^
    
    Error: Implement me. Unknown stdin file type!
        at process.stdin (internal/process/stdio.js:86:15)
        at startup (node.js:198:18)
        at node.js:457:3
    

    如果我直接在资源管理器中创建一个控制台窗口,它工作得非常好。

    【讨论】:

    • 如何“直接在资源管理器中制作控制台窗口”?
    • 请注意错误出现在电子窗口控制台中,而不是提示本身中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多