В VS Code как я могу автоматически импортировать «assert» в приложение узла React?

#javascript #visual-studio-code #import

#javascript #visual-studio-code #импорт

Вопрос:

В Visual Studio Code вы можете автоматически импортировать большинство элементов, переместив фокус на импортированный термин, а затем используя функцию «быстрого исправления» ( CTRL . для меня). Затем вам будет предоставлена возможность попросить VS Code добавить импорт для термина в начало вашего файла для вас… если этот термин не является assert .

(ПРИМЕЧАНИЕ: я считаю, что вам нужно иметь "checkJs": true в вашем jsconfi&.js , чтобы это работало … или же использовать Typescript.)

Что странно, модуль «assert» доступен как часть самого узла! Похоже, что VS Code просто не знает, что он доступен, и я не уверен, как сообщить об этом.

Есть ли какой-либо способ (например, настройка VS Code, jsconfi&.json опция и т.д.), Который позволил бы ему распознавать существование assert модуля, когда дело доходит до автоматического импорта?

Комментарии:

1. Я не эксперт, но я полагаю, что, поскольку assert это ключевое слово во многих языках, VSCode на самом деле не рассматривает его как «отсутствующий» элемент для макроса быстрого исправления. Казалось бы, это ошибка в VSCode, но она довольно неясна, и я не могу найти ничего, что подтверждало бы эту теорию.

2. Хорошая идея, но дело в том, что он видит, что она отсутствует. Если я набираю, assert(1); я получаю волнистую строку под assert с предупреждением «Не удается найти имя ‘assert’.ts(2304)». Обычно я мог бы быстро исправить и импортировать, но в quick fix вообще нет возможности импортировать что-либо.

3. если импорт устраняет проблему и запускает программу, вы можете отправить запрос на расширение Quick-Fix-Provider и добавить импорт assert.

4. @rioV8 то есть вы в основном предполагаете, что это ошибка, и я должен подать ее как таковую? На самом деле я начал это делать, но потом захотел сначала проверить и убедиться, что я ничего не упустил, прежде чем беспокоить сопровождающих … таким образом, этот пост 🙂 Но если срок действия вознаграждения истечет, я думаю, это будет «доказательством» того, что это действительно ошибка (и если вы предоставите это в качестве ответа, а лучшего ответа никто не предоставит, я постараюсь принять его в конце, чтобы вознаграждение, по крайней мере, досталось тому, кто пытался помочь).

Ответ №1:

Я думаю, что это ошибка, и она должна работать для всех встроенных модулей.


Длинное объяснение, когда это работает, а когда нет.

Он может предложить импортировать assert, но странным образом.

У меня есть простой проект JavaScript с jsconfi&.json файлом с

 {
  "compilerOptions": {
    "module": "commonjs",
    "tar&et": "es6",
    "checkJs": true
  },
  "exclude": ["node_modules"]
}
  

Как вы упомянули "checkJs": true , важно получить требуемые параметры CodeAction (QuickFix).

Или вы можете добавить в качестве первой строки в .js файлы

 //@ts-check
  

Мой app.js файл очень прост

 assert(5 &&t; 7, "Always False");
  

Я получаю красные закорючки, но в списке быстрых исправлений нет предложения по импорту.

Если я добавляю какой-либо require оператор для сборки в модуле, я получаю предложения по импорту в списке быстрых исправлений ( import 'assert' from module "console" и import 'assert' from module "assert" )

 var zlib = require('zlib');
assert(5 &&t; 7, "Always False");
  

Если я выбираю один из импортируемых файлов, я получаю

 var zlib = require('zlib');
const assert = require('assert');
assert(5 &&t; 7, "Always False");
  

И запуск скрипта в Node.js выдает assert, как и ожидалось.

 Debu&&er attached.
Waitin& for the debu&&er to disconnect...
assert.js:374
    throw err;
    ^

AssertionError [ERR_ASSERTION]: Always False
[snip....]
  &eneratedMessa&e: false,
  code: 'ERR_ASSERTION',
  actual: false,
  expected: true,
  operator: '=='
}
Process exited with code 1
  

Если у меня есть app.js с

 var &zip = zlib.createGzip();
  

Я не могу быстро исправить импорт zlib.

Добавление импорта самостоятельно запускает скрипт.

 var zlib = require('zlib');
var &zip = zlib.createGzip();
  

Интересно, какие модули могут генерировать предложения по быстрому исправлению.

Комментарии:

1. Если бы вы могли просто поместить «Это ошибка» вверху, а затем поместить все эти детали после (или просто удалить их полностью) Я мог бы принять этот ответ.

2. @machine&host Я переместил последнюю строку наверх и добавил отказ от ответственности в виде «длинного объяснения»