#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 Я переместил последнюю строку наверх и добавил отказ от ответственности в виде «длинного объяснения»