#node.js #windows
#node.js #Windows
Вопрос:
Рассмотрим следующую крошечную программу на JavaScript:
#!/usr/bin/env node
const inquirer = require('inquirer');
async function foo() {
const response = await inquirer.prompt({
type: "confirm",
name: "foo",
message: "Do you want to foo?",
default: true,
});
console.log(response.foo);
}
foo();
Все, что делает эта программа, это задает конечному пользователю вопрос, используя Inquirer.js библиотека.
Однако использование стандартного терминала Git Bash (в Windows), вызов его с кавычками и без кавычек изменяет поведение программы, как показано на следующем скриншоте:
Когда кавычки помещаются вокруг узла, это приводит к дублированию вопроса в терминале, что делает программу похожей на сбой.
- Почему добавление кавычек в «узел» изменяет поведение программы?
- Есть ли какое-то исправление, которое я могу включить в свой код JavaScript, чтобы обойти эту проблему?
Комментарии:
1. Цветовые коды узлов (и браузеров) регистрируют выражения в зависимости от того, к какому типу они относятся, что, вероятно, частично связано с тем, что здесь происходит.
Ответ №1:
Я не думаю, что это ваша программа.
Мне кажется, что проблема заключается только в обновлении строки. Чтобы уменьшить проблему, попробуйте тот же эксперимент с этой программой, которую я нашел:
var util = require('util');
var x = 0;
setInterval(function() {
process.stdout.write('hello: ' x 'r');
x ;
}, 1000);
источник: https://gist.github.com/markcode/a8b1bfa545bb701daa2c
У этой программы нет цветов, поэтому, если это происходит, это просто потому, что помещение «узла» в кавычки делает его таким, что он не может r
без n
Если заменить main
на приведенную выше программу, вы и поместите ее в кавычки, и увидите это, тогда вы ближе
$ "node" main.js
hello: 1
hello: 2
hello: 3
Пожалуйста, дайте мне знать ответ, если вы его решите.. действительно интересно.
хорошо, я получил еще одну идею, быстро просмотрев их код и посмотрев, где у них есть if, который добавляет a n
— это довольно долгий путь, но попробуйте запустить эту программу с кавычками и без кавычек вокруг узла
const readline = require('readline');
const cliWidth = require('cli-width');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
console.log(cliWidth({
defaultWidth: 80,
output: rl.output,
}));
process.exit(0);
он должен быть сохранен в этом каталоге проекта, потому cli-width
что как зависимость проекта.
Мне интересно, выдает ли эта программа вам 0
, когда вы используете кавычки, и это приводит к тому, что это происходит:
if (rawPromptLine.length % width === 0) {
content = 'n';
}
Комментарии:
1. 0h
n
то, что я ввел в качестве аргумента.. это случайность… Я только что повторил попытку.. это не имеет никакого отношения ни к чему.. так что не позволяйтеn
aftermain.js
сбить вас с толку2. Также что вы получаете за
"node" --version
иnode --version
?3. 1) Не похоже, что вы используете Git Bash для Windows. 2) Я опробовал эту программу, и помещение узла в кавычки не меняет поведение программы.
4. Да — я использую просто обычный bash. Вот почему я подумал, что это должно быть связано со средой… но теперь я вижу, что это сложнее, чем это .. что-то в этой библиотеке ведет себя забавно в этом одном случае с git bash!
5. Я добавил еще одну перспективную идею, прежде чем мне придется одолжить компьютер друга с Windows, чтобы попробовать это. Пожалуйста, взгляните на мое обновление, если у вас есть секунда