【问题标题】:In VS Code How Can I Automatically Import "assert" in a React Node App?在 VS Code 中,如何在 React Node 应用程序中自动导入“assert”?
【发布时间】:2020-08-18 15:06:44
【问题描述】:

在 Visual Studio Code 中,您可以通过将焦点移至导入的术语,然后使用“快速修复”功能(对我来说是CTRL + .)来自动导入大部分内容。然后,您可以选择让 VS Code 为您将术语的导入添加到文件顶部...除非该术语是 assert

注意:我认为您需要在您的jsconfig.js 中添加"checkJs": true 才能使其正常工作......或者使用Typescript。)

奇怪的是,“断言”模块可用的,作为 Node 本身的一部分!似乎 VS Code 并没有知道它是可用的,我不知道如何让它知道。

当涉及到自动导入时,是否有任何方法(例如,VS Code 设置、jsconfig.json 选项等)可以使其识别出assert 模块的存在?

【问题讨论】:

  • 我不是专家,但我相信由于assert 是许多语言中的关键字,VSCode 并不真正将其视为快速修复宏的“缺失”项。这似乎是 VSCode 中的一个错误,但它相当模糊,我找不到任何可以证实该理论的东西。
  • 好主意,但问题是,它确实认为它丢失了。如果我键入assert(1);,我会在assert 下看到一条波浪线,并带有警告“找不到名称'assert'.ts(2304)”。通常我可以快速修复和导入,但在快速修复中根本没有导入任何东西的选项。
  • 如果导入解决了问题并使程序运行,您可以提出请求以扩展 Quick-Fix-Provider 并添加导入断言。
  • @rioV8 所以你基本上是在暗示这是一个错误,我应该这样归档吗?我实际上是开始这样做的,但后来我想检查并确保我没有先错过任何东西,然后再打扰维护人员......因此这篇文章:-)但是如果赏金到期,我想这将是“证明“这确实是一个错误(如果您提供它作为答案,而没有人提供更好的答案,我会在最后尝试接受它,因此赏金至少会流向试图提供帮助的人)。

标签: javascript visual-studio-code import


【解决方案1】:

我认为这是一个错误,它应该适用于所有内置模块。


详细说明何时有效,何时无效。

它可以建议导入断言,但方式很奇怪。

我有一个带有 jsconfig.json 文件的简单 JavaScript 项目

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "checkJs": true
  },
  "exclude": ["node_modules"]
}

正如您所提到的,"checkJs": true 对于获得所需的 CodeAction (QuickFix) 选项至关重要。

或者您可以在.js 文件中添加为第一行

//@ts-check

我的app.js文件很简单

assert(5 > 7, "Always False");

我得到了红色的曲线,但在快速修复列表中没有导入建议。

如果我为内置模块添加任何 require 语句,我会在快速修复列表中获得导入建议(import 'assert' from module "console"import 'assert' from module "assert"

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

如果我选择我得到的进口商品之一

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

在 Node.js 中运行脚本会按预期抛出断言。

Debugger attached.
Waiting for the debugger to disconnect...
assert.js:374
    throw err;
    ^

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

如果我有一个app.js

var gzip = zlib.createGzip();

我无法快速修复导入 zlib。

自己添加导入会使脚本运行。

var zlib = require('zlib');
var gzip = zlib.createGzip();

我想知道哪些模块可以生成快速修复建议。

【讨论】:

  • 如果您可以将“这是一个错误”放在顶部,然后将所有这些详细信息放在后面(或完全删除它们),我可以接受这个答案。
  • @machineghost 我将最后一行移到顶部并添加了“长解释”免责声明
猜你喜欢
  • 1970-01-01
  • 2022-10-30
  • 2021-05-25
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2017-12-18
  • 2017-11-21
相关资源
最近更新 更多