Я новичок в 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 как согласно документации, но это не имело значения.
2 ответа
Проблема вызвана странным динамическим способом определения этих методов chai. В качестве обходного пути я могу предложить использовать chai.d.ts:
Откройте "
Settings | Languages & Frameworks | JavaScript | Libraries
"Нажмите кнопку "
Download...
" и выберите "Заглушки сообщества TypeScript"Найдите "чай" и нажмите "
Download and Install
".
См. http: //blog.jetbrains .com / webstorm / 2014/07 / how-webstorm-works-completed-for-javascript-libraries /, 'Использование заглушек сообщества TypeScript (файлы определений TypeScript)' для получения дополнительной информации.
В WebStorm 2019.3 я выполняю следующие шаги, чтобы принудительное завершение кода (включая автоматический импорт) работало для настраиваемого, самостоятельно опубликованного пакета NPM, который содержит только чистые модули ES6:
- Убедитесь, что сам проект имеет файл package.json в корне проекта и что package.json включает желаемый пакет в объект «зависимости». Например:
{
"name": "testproject",
"version": "1.0.0",
"dependencies": {
"@yourname/yourpackage": "latest"
}
}
В WebStorm выберите File> Invalidate Caches / Restart ...
Чтобы включить автоматический импорт содержимого пакета, убедитесь, что в файле JavaScript, в котором используется пакет, есть хотя бы ОДИН оператор экспорта. Например, в следующем коде присутствует экспорт, поэтому автозавершение кода автоматически импортирует функцию пакета isNil ():
export function init () {
isNil
}
Для сравнения, следующий код не содержит оператора экспорта, поэтому isNil () не импортируется автоматически:
function init () {
isNil
}
Для меня все три предыдущих шага необходимы для работы автозавершения кода с моими собственными пакетами NPM (с чистыми модулями ES6) в WebStorm.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.