2013-01-14 2 views
15

Quasi per tutti i moduli di terze parti La complicazione automatica di WebStorm non può risolvere metodi/campi. Sotto autocompletion intendo anche tutte le caratteristiche di tipo intellisense. Per esempio:È necessario un trucco per rendere il completamento automatico di WebStorm in grado di risolvere i metodi dei moduli di terze parti

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

Allo stesso tempo si risolve

async.exports.series(). 

Ma questo porta a Errore di runtime:

TypeError: Cannot call method 'series' of undefined 

Per i miei propri moduli che ho trovato soluzione. Se faccio nel modulo:

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

Quindi la procedura di autocomposizione per alcuniMethod funziona correttamente.

Per quanto riguarda quanto sopra ho un sacco di domande.
1. Perché l'ide non riesce a risolvere async.series()?
2. Perché async.exports.series() porta all'errore di runtime?
3. Come far funzionare la autocomplissione?

WebStorm 5.0.4.

risposta

12

Usa nuovo come segue:

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

Grazie a questo funziona ... 1. Mi piacerebbe capire come appease WebStorm. 2. Se questo potrebbe avere effetti collaterali negativi per il normale uso di node.js. –

18

Vai in Impostazioni -> JavaScript -> Biblioteche -> Controlla "Node.JS Globali"

+0

ha funzionato, grazie! – cambecc

+3

Ho selezionato questa impostazione, ma vedo ancora il problema. Altri indizi? –

+0

Questa dovrebbe essere la risposta corretta. Risolto il problema per me. –

2

Nuova WebStorm v7 ha la capacità di definire stub tipografico della comunità per popolare moduli. Questo risolve parzialmente il problema con gli avvertimenti di completamento automatico e IDE.

Per i moduli meno popolari che preferiscono usare questa brutta trucco:

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

Tuttavia, questo non risolve il problema, quando la proprietà è collegata al modulo da qualche algoritmo (ad esempio l'iterazione filesystem). Per i moduli piccoli e impopolari è un caso raro.

BTW, async ha già lo stub tipografico in [email protected]: borisyankov/DefinitelyTyped.git repository.

+0

Strano, ma cose come 'var connect = require ('connect') || '';' funzionano anche per me. – Resure