2013-01-14 6 views
15

Prawie we wszystkich modułach stron trzecich autokalicja WebStorm nie może rozpoznać metod/pól. Pod autouzupełnianiem mam na myśli także wszystkie funkcje podobne do intellisense. Na przykład:Potrzebujesz obejścia, aby autouzupełnianie WebStorm mogło rozwiązać metody modułów stron trzecich

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

Jednocześnie rozwiązuje

async.exports.series(). 

Ale to prowadzi do Runtime Error:

TypeError: Cannot call method 'series' of undefined 

Dla moich własnych modułów Znalazłem obejście. Jeśli zrobię to w module:

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

Następnie autouzupełnianie dla someMethod działa dobrze.

Jeśli chodzi o powyższe, mam kilka pytań.
1. Dlaczego idea nie może rozwiązać async.series()?
2. Dlaczego async.exports.series() prowadzi do błędu w czasie wykonywania?
3. Jak włączyć autouzupełnianie?

WebStorm 5.0.4.

Odpowiedz

12

Zastosowanie nowego następująco:

var async = new require('async'); 
+4

Dzięki temu działa ... 1. Chciałbym zrozumieć, w jaki sposób działa WebStorm. 2. Jeśli to może mieć złe skutki uboczne dla normalnego użycia node.js. –

18

przejdź do Ustawienia -> JavaScript -> Biblioteki -> Sprawdź "node.js Globals"

+0

to działało, dziękuję! – cambecc

+3

Mam to ustawienie wybrane, ale nadal widzę problem. Jakieś dodatkowe wskazówki? –

+0

To powinna być poprawna odpowiedź. Rozwiązał problem dla mnie. –

2

New WebStorm v7 ma możliwość definiowania odcinki Typescript społeczności na popularne moduły. To częściowo rozwiązuje problem z autouzupełnianiem i ostrzeżeniami IDE.

Dla mniej popularnych modułów wolę używać tego brzydkiego oszukiwać:

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

Jednak to nie rozwiązuje problemu, gdy nieruchomość została podłączona do modułu za pośrednictwem algorytmu (np iteracji systemu plików). W przypadku małych i niepopularnych modułów jest to rzadki przypadek.

BTW, async ma już kod maszynopisu na [email protected]: repozytorium borisyankov/DefinitelyTyped.git.

+0

Dziwne, ale rzeczy takie jak 'var connect = require ('connect') || '';' działają również dla mnie. – Resure