Нужно обходное решение, чтобы сделать автозаполнение WebStorm способным разрешать методы сторонних модулей

Практически для всех сторонних модулей autocomplition WebStorm не может разрешать методы/поля. Под автозавершением я имею в виду также все функции, подобные intellisense. Например:

var async = require('async');
async.series() //WebStorm tooltip says: Unresolved function or method series()

В то же время он разрешает

async.exports.series(). 

Но это приводит к ошибке выполнения:

TypeError: Cannot call method 'series' of undefined

Для моих собственных модулей я нашел обходное решение. Если я делаю в модуле:

var myModule = module.exports;
myModule.someMethod = function(){
...
}

Тогда автозаполнение для someMethod отлично работает.

Относительно всего выше, у меня есть куча вопросов.
1. Почему идее не удается разрешить async.series()?
2. Почему async.exports.series() приводит к ошибке выполнения?
3. Как сделать работу автозаполнения?

WebStorm 5.0.4.

Ответы

Ответ 1

Используйте новый, как показано ниже:

var async = new require('async');

Ответ 2

Перейдите в Настройки → JavaScript → Библиотеки → Проверьте "Node.js Globals"

Ответ 3

Новый WebStorm v7 имеет возможность определять Typescript заглушки сообщества для популярных модулей. Это частично решает проблему с автозавершением и предупреждениями IDE.

Для менее популярных модулей я предпочитаю использовать этот уродливый чит:

//noinspection ConstantConditionalExpressionJS,JSPotentiallyInvalidConstructorUsage
var async = false ? new require('async') : require('async');

Однако это не решает проблему, когда свойство привязано к модулю некоторым алгоритмом (например, итерирующей файловой системой). Для небольших и непопулярных модулей это редкий случай.

BTW, async уже имеет Typescript заглушку в git @github.com: borisyankov/DefinitelyTyped.git репозиторий.