Ошибка "Неизвестный тип файла stdin" в окнах
Я боролся с этими ошибками в течение 2 дней и не могу понять, почему электронное средство визуализации process.stdin
выходит из строя в окнах os.
Как воспроизвести:
type npm install devtool -g
затем введите devtool
внутри консольного типа process.stdin
и появится сообщение об ошибке будет две ошибки: одна в строке 127, а другая в строке 128 в C:\Users\rafael\AppData\Roaming\npm\node_modules\devtool\node_modules\electronic-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
Ответы
Ответ 1
Я столкнулся с той же проблемой.
Сначала я подумал, что devtool как REPL не нуждается в stdin и является простой ошибкой в сборке Windows. Владельцы репо GitHub исправляют это, просто игнорируя stdin при запуске, но, как вы обнаружили, devtool сломан и вы не можете ничего сделать с 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 < 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, но закрыт, поэтому я открыл новый.
Ответ 2
Существует другой вопрос, указывающий на ту же проблему. В одном из комментариев говорится, что это известная проблема iisnode
, а также предлагает обход, заверяя все вызовы process.stdin
следующим образом:
if(!process.env.IISNODE_VERSION) {
// do stuff with process.stdin
}
Это может быть временное решение. Я уверен, что вы уже посмотрели на этот пост, что вы думаете?
Ответ 3
Чтение через libuv исходный код, который используется узлами для некоторых операций низкого уровня, кажется, что причина в том, что тип буфера или дескриптор не может быть определен специально для окон. Функция GetFileType
, похоже, возвращает неизвестный дескриптор.
Это, безусловно, проблема только с окнами, потому что часть библиотеки, которая определяет тип дескриптора, находится в src/win/handle.c
исходного кода УФ, поэтому я не думаю, что это действительно влияет на ОС * NIX.
Возможно, установленная версия nodejs отсутствует опция времени сборки?
Ответ 4
Самое простое обходное решение - просто заставить devtool работать в своем консольном окне.
Итак, вместо запуска:
devtool
Запустите это:
start devtool
Он должен появиться в новом окне и не путать с входным каналом.
Тот же трюк работает с большим количеством пакетов Node.
Ответ 5
У меня была эта ошибка при попытке запустить электрон из окна консоли; это было странно, потому что он работал нормально. Сегодня я понял, что единственное, что я изменил, это запустить окно терминала из кода Visual Studio (с надстройкой).
Если я использую терминал, созданный из 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
если я создаю консольное окно непосредственно в проводнике, он отлично работает.