Ошибка "Неизвестный тип файла 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

если я создаю консольное окно непосредственно в проводнике, он отлично работает.