在WebStorm

时间:2016-09-06 10:17:18

标签: javascript node.js intellisense webstorm

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

这是我的代码,简化:

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,但这没有任何区别。

3 个答案:

答案 0 :(得分:5)

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

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

  • 点击“Download...”按钮,然后选择“TypeScript社区存根”

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

enter image description here

有关详情,请参阅http://blog.jetbrains.com/webstorm/2014/07/how-webstorm-works-completion-for-javascript-libraries/,'使用TypeScript社区存根(TypeScript定义文件)'

答案 1 :(得分:3)

WebStorm 2020.1

TypeScript定义也可以直接通过package.json添加:

  1. 打开项目的package.json
  2. 将光标定位在包上(在“依赖项”部分内)
  3. 按alt + enter(或单击灯泡)
  4. 选择安装“ @ types / 名称”(其中名称是依赖项)

例如:

WebStorm intention popup

答案 2 :(得分:1)

在WebStorm 2019.3中,我执行以下步骤来强制代码完成(包括自动导入)用于仅包含纯ES6模块的自定义,自发布的NPM软件包:

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

  2. 要对包内容启用自动导入,请确保使用该包的JavaScript文件具有AT LEAST ONE导出语句。例如,在以下代码中,存在导出功能,因此“代码完成”功能自动导入包函数isNil():

export function init () {
  isNil
}

通过比较,以下代码不包含export语句,因此isNil()不会自动导入:

function init () {
  isNil
}

对于我来说,前面的所有三个步骤对于代码完成对于WebStorm中我自己的NPM软件包(带有纯ES6模块)而言都是必需的。