在 WebStorm 中为 node_modules 启用代码完成

Enable code completion for node_modules in WebStorm

我是 WebStorm 的新手,也是 Node 开发的新手。我正在处理现有项目,并希望为我的 node_modules 完成代码。更具体地说,我正在使用 Chai,而 WebStorm 似乎没有找到我的 expect.to 语句的 .have 成员。

这是我的代码,经过简化:

var expect = require('chai').expect;

import {Customer} from '../../app/model/Customer.js';

describe('...', function() {
    it('...', function() {
        var customer = new Customer();
        expect(customer).to.have.property('name');
    });
});

我在 have 调用下看到了波浪线,WebStorm 告诉我 Unresolved variable have

如果我在 to 上按 F12,WebStorm 会将我带到另一个节点模块 shelljs,但我还没有导入那个。

这是因为 WebStorm 无法解析 javascript 中的所有内容吗?

我已经为 NodeJS 启用了编码辅助 per the docs,但这没有任何区别。

问题是由这些 chai 方法的奇怪动态定义方式引起的。作为解决方法,我建议使用 chai.d.ts:

  • 打开“Settings | Languages & Frameworks | JavaScript | Libraries

  • 点击“Download...”按钮然后select"TypeScript community stubs"

  • 找到"chai"并点击“Download and Install”。

有关详细信息,请参阅 http://blog.jetbrains.com/webstorm/2014/07/how-webstorm-works-completion-for-javascript-libraries/、'Using TypeScript community stubs (TypeScript definition files)'

WebStorm 2020.1

TypeScript 定义也可以通过 package.json:

直接添加
  1. 打开项目的package.json
  2. 将光标放在包上(在依赖项部分)
  3. 按 alt+enter(或单击灯泡)
  4. 选择安装 '@types/name'(其中 name 是依赖项)

例如:

在 WebStorm 2019.3 中,我按照以下步骤强制代码完成(包括自动导入)为仅包含纯 ES6 模块的自定义、自行发布的 NPM 包工作:

  1. 确保项目本身在项目的根目录下有一个 package.json 文件,并且 package.json 在“依赖项”对象中包含 desire 包。例如:
{
  "name": "testproject",
  "version": "1.0.0",
  "dependencies": {
    "@yourname/yourpackage": "latest"
  }
}
  1. 在 WebStorm 中,select 文件 > 使缓存无效/重新启动...

  2. 要启用包内容的自动导入,请确保使用包的 JavaScript 文件至少有一个导出语句。例如,在下面的代码中,存在导出,因此代码完成自动导入包函数 isNil():

export function init () {
  isNil
}

相比之下,以下代码不包含导出语句,因此不会自动导入 isNil():

function init () {
  isNil
}

对我来说,前面的所有三个步骤都是代码完成所必需的,以便在 WebStorm 中为我自己的 NPM 包(带有纯 ES6 模块)工作。