我一直在努力解决这个错误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
答案 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。
答案 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
如果我直接在资源管理器中创建一个控制台窗口,它可以正常工作。