Windows中的“未知的stdin文件类型”错误

时间:2016-03-05 21:57:14

标签: node.js windows electron

我一直在努力解决这个错误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

5 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。

首先我认为devtool作为REPL不需要stdin,并且是windows build中的一个简单bug。 GitHub repo所有者修复它只是在启动时忽略stdin但是,正如你所发现的那样,devtool已经坏了,你不能在windows中对stdin做任何事情。

作为概念证明,我创建了一个超出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&lt; input.txt中

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

答案 1 :(得分:1)

another question指向同一问题。其中一条评论指出它是一个known iisnode issue,并建议通过将所有来电包装到process.stdin来解决问题:

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

它可以是一个临时解决方案。我确定你已经看过那篇文章,你觉得怎么样?

答案 2 :(得分:1)

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

这绝对是一个仅限Windows的问题,因为确定句柄类型的库部分在UV源代码的src/win/handle.c范围内,因此我认为这不会影响* NIX OS'。< / p>

也许已安装的nodejs版本缺少构建时选项?

答案 3 :(得分:1)

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

所以不要运行:

devtool

运行:

start devtool

它应该弹出一个新窗口,不要混淆输入管道。

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

答案 4 :(得分:0)

尝试从控制台窗口启动电子设备时出现此错误;这很奇怪,因为它一直很好。我今天意识到我唯一改变的就是从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

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