Я новичок в 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.

Если я F12 на to, WebStorm перейдет к другому модулю узла, shelljs, но я не импортировал его.

Это потому, что WebStorm не может разрешить все в javascript?

Я включил Coding Assistance для NodeJS как согласно документации, но это не имело значения.

6
Peter 6 Сен 2016 в 13:17

2 ответа

Лучший ответ

Проблема вызвана странным динамическим способом определения этих методов chai. В качестве обходного пути я могу предложить использовать chai.d.ts:

  • Откройте "Settings | Languages & Frameworks | JavaScript | Libraries"

  • Нажмите кнопку "Download..." и выберите "Заглушки сообщества TypeScript"

  • Найдите "чай" и нажмите "Download and Install".

enter image description here

См. http: //blog.jetbrains .com / webstorm / 2014/07 / how-webstorm-works-completed-for-javascript-libraries /, 'Использование заглушек сообщества TypeScript (файлы определений TypeScript)' для получения дополнительной информации.

7
lena 6 Сен 2016 в 14:23

В WebStorm 2019.3 я выполняю следующие шаги, чтобы принудительное завершение кода (включая автоматический импорт) работало для настраиваемого, самостоятельно опубликованного пакета NPM, который содержит только чистые модули ES6:

  1. Убедитесь, что сам проект имеет файл package.json в корне проекта и что package.json включает желаемый пакет в объект «зависимости». Например:
{
  "name": "testproject",
  "version": "1.0.0",
  "dependencies": {
    "@yourname/yourpackage": "latest"
  }
}
  1. В WebStorm выберите File> Invalidate Caches / Restart ...

  2. Чтобы включить автоматический импорт содержимого пакета, убедитесь, что в файле JavaScript, в котором используется пакет, есть хотя бы ОДИН оператор экспорта. Например, в следующем коде присутствует экспорт, поэтому автозавершение кода автоматически импортирует функцию пакета isNil ():

export function init () {
  isNil
}

Для сравнения, следующий код не содержит оператора экспорта, поэтому isNil () не импортируется автоматически:

function init () {
  isNil
}

Для меня все три предыдущих шага необходимы для работы автозавершения кода с моими собственными пакетами NPM (с чистыми модулями ES6) в WebStorm.

1
colin moock 16 Июл 2020 в 18:29