Visual Studio Code 的智能提示功能在 JavaScript 上不起作用。

40

我正在使用Visual Studio Code(VSC)0.10.11版在Windows和Mac上。本问题的目的是为了展示这个小JavaScript代码片段:

'use strict';

const os = require('os');
console.log(os.homedir());

我关注了 John Papa 在 Visual Studio Code 上的相关内容(博客文章Pluralsight Visual Studio Code JavaScript Intellisense - 仅限拥有账户的用户),所以我期望 VSC 在可用的时候提供 IntelliSense 和快速修复选项。

在上面的代码片段中,VSC 可以识别 consolelog()(我使用 hoover,但 IntelliSense 的效果相同):

console log

但不能识别 oshomedir()

os homedir

但是所有这 4 个 typings 都在 typings/main/ambient/node/index.d.ts 中。我知道区别在于 os 中的 require,但在 John Papa 的视频课程中,VSC 也提供了所需模块的 IntelliSense。不同之处在于 John Papa 使用 tsd,而我使用的是 typings

所以我的问题是:

  • 如何启用所有已知 typings 的 IntelliSense?
  • 我需要做什么才能让 VSC 为我提供快速修复(缺少 typings 的模块有绿色下划线)?
5个回答

41

以上链接已过时。在旧版本的VS Code中,您需要像这样引用您的类型定义:/// <reference path> for somelibrary.d.ts

使用新版本,您需要通过在项目的根目录下创建jsconfig.json来初始化您的项目,并添加以下内容:

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs"
    },
    "exclude": [
      "node_modules"
    ]
}

接下来需要安装typing。你可以使用tsd或typings。在你的情况下,你需要安装tsd install node 或者 typings install node --ambient。确保你已经安装了typings/tsd。重启项目。

请参考文档:

  1. 设置JS项目 - https://code.visualstudio.com/docs/languages/javascript
  2. Node.js - https://code.visualstudio.com/docs/runtimes/nodejs
  3. 调试 - https://code.visualstudio.com/docs/editor/debugging

更新:

自版本1.7以来,无需手动安装typings,它们应该会自动下载。 更好的JavaScript IntelliSense


3
有了适当的jsconfig.json,智能提示功能可以工作。但是,当你阅读第一个链接中的文档时,即使没有可用的jsconfig.json文件,这应该是默认行为: 注意: 如果在工作区中没有 jsconfig.json,则 VS Code 默认排除 node_modules 文件夹和由 out 属性定义的文件夹。 + 项目文件夹内的 CommonJS 和 AMD 模块将自动提供 IntelliSense。 因此,我认为它只是一个没有配置文件就无法工作的错误。无论如何,现在它可以工作了。谢谢您的回答! - ChrLipp
4
他们已经更改了jsconfig.json的行为。
如果您的工作区中没有jsconfig.json,则将使用以下默认值:
排除列表包括node_modules文件夹和由out属性定义的文件夹。 请注意,如果您没有定义jsconfig.json以标记项目根目录,则Salsa将认为每个JavaScript文件都是一个独立的“岛屿”。 没有jsconfig.json文件,跨文件和打字文件的智能感知将无法正常工作。
- Dauren Akilbekov
3
我认为使用 beta 软件的缺点是,事情变化迅速。 - Dauren Akilbekov
你解决了你的问题吗?能分享更多信息吗? - Dauren Akilbekov

16

有一个内置扩展名叫 TypeScript和JavaScript语言特性 (vscode.typescript-language-features) ,它是被禁用的。

为了启用它,请打开扩展面板,搜索“@built-in JavaScript”,并启用所需的扩展。

现在您应该能够使用自动完成功能了。


这个问题一直困扰着我!我尝试了在谷歌上找到的每个解决方案。如果可以的话,我会给你更多的赞!在找到这条评论之前,我花了一个多小时!谢谢陌生人! - DazBaldwin
由于某种原因,我在一年前更改了某些内容,但已经忘记了。谢谢! - Michael Ozeryansky
4
现在这是“@builtin Javascript”。Flow扩展中有指令可以禁用内置语言功能,卸载后可能会忘记重新启用它。 - willnode
这个东西要不小心才能关掉,真让我吃惊,居然有这么多人觉得这个答案有用。 - undefined

3

我在全局的“process”对象上遇到了这个问题。只有当我向文件中添加任何“require”语句时,Vscode才会启用对进程对象的智能感知。

因此,如果没有其他的require语句,你可以添加:

const process = require('process');

在你的脚本开头加上此代码,以获取智能感知。

0

标题:在Node.js中验证依赖项:确保正确使用require语句

如果其他方法对你无效,这可能是你的解决方案!

在Node.js中,确保从所需文件中正确导入所有依赖项是至关重要的,使用require语句。这种验证在与诸如VSCode IntelliSense之类的语言服务器一起工作时尤为重要,因为任何导入/导出错误都可能影响其功能。

例如,让我们考虑一个场景,其中由于import语句的错误使用,导致VSCode IntelliSense无法按预期工作:

// Your module

const { ImageAnnotatorClient } = require("@google-cloud/vision");
import { postData } from ("./http.service");

module.exports = {
  // ... anything
};

// Your logic

const module = require('./your-module)
// module. => intellisense wont work

在这个例子中,import语句与require不正确地一起使用,这可能导致代码执行和工具支持方面的问题。为了确保操作顺畅和正确的工具功能,始终使用require来引入Node.js模块。
const { ImageAnnotatorClient } = require("@google-cloud/vision");
const { postData } = require("./http.service");

module.exports = {
  // ... anything
};

通过正确使用require语句,您可以避免兼容性问题,并确保您的Node.js应用程序与各种开发工具和语言服务器(如VSCode IntelliSense)无缝配合。

-1

经过4个小时的谷歌搜索,我最终决定卸载nodejs、npm和typescript,然后重新安装它们。上一次我使用了nvm来安装它们,但这一次我决定不使用nvm,而是从node源中安装它们,因为我使用的是Ubuntu,我执行了下面的命令,对于Windows或Mac,只需安装它们,无需任何包或版本管理器。

curl https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb https://deb.nodesource.com/node_7.x $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install nodejs

上述命令安装了Node.js和npm,然后我运行了下面的命令来安装TypeScript

sudo npm install --global typescript

我将我的VSCode更新到了最新版本。

enter image description here

然后在我的VSCode右下角,我点击了JavaScript来更改语言模式,我在搜索栏中输入了"type"并选择TypeScript作为我的新选择的语言模式...........BINGO

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接