Ответ 1
Используйте новый, как показано ниже:
var async = new require('async');
Практически для всех сторонних модулей 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.
Используйте новый, как показано ниже:
var async = new require('async');
Перейдите в Настройки → JavaScript → Библиотеки → Проверьте "Node.js Globals"
Новый WebStorm v7 имеет возможность определять Typescript заглушки сообщества для популярных модулей. Это частично решает проблему с автозавершением и предупреждениями IDE.
Для менее популярных модулей я предпочитаю использовать этот уродливый чит:
//noinspection ConstantConditionalExpressionJS,JSPotentiallyInvalidConstructorUsage
var async = false ? new require('async') : require('async');
Однако это не решает проблему, когда свойство привязано к модулю некоторым алгоритмом (например, итерирующей файловой системой). Для небольших и непопулярных модулей это редкий случай.
BTW, async уже имеет Typescript заглушку в git @github.com: borisyankov/DefinitelyTyped.git репозиторий.