2015-11-09 13 views
7

Con peerDependencies in package.json posso fare in modo che l'utente ha un modulo specifico nella RootFolder applicazione:node.js e NPM v3: Come aggiungere Travis mette alla prova peerDependencies compatibili in package.json

module_a

var modB = require('module_b') 
... 

package.json di module_a

... 
"peerDependencies": { 
    "module_b": "^1.0.1" 
}, 
"dependencies": { 
}, 
... 

my_app

var modA = require('module_a') 
var modB = require('module_b') 
... 

struttura dei file

Con NPM v1/v2 questa configurazione funziona perfettamente: npm install module_a installa module_a e module_b nel RootFolder:

my_app 
    node_modules 
    module_a 
    module_b 

Grande, questo è quello che voglio!

npm v3

Ma durante l'installazione con npm install module_a, stampe NPM v2 questo avvertimento:

npm WARN peerDependencies The peer dependency [email protected]^1.0.1 included 
from module_a will no longer be automatically installed to fulfill the 
peerDependency in npm 3+. Your application will need to depend on it 
explicitly. 

Quindi, NPM v3 non verrà installato la dipendenza pari automaticamente, devo installarlo manualmente per my_app per ottenere lo stesso risultato.

Il problema

Ma che dire nel mio test quando si usa NPM v3?

npm v3 non installa la dipendenza peer, quindi travis avrà esito negativo perché non riesce a trovare module_b. Ma non posso aggiungere il modulo come dipendenza regolare perché di my_app e module_a utilizzare diversi "istanze" di module_b:

my_app 
    node_modules 
    module_a 
     node_modules 
     module_b   // used by module_a 
    module_b    // used by my_app 

che non è quello che voglio perché module_a modifica alcuni parametri in module_b, ma queste modifiche non sono visibili in my_app.

Domanda

Come posso aggiungere module_b come (peer) dipendenza nel RootFolder senza rompere le prove di Travis da module_a?

Grazie.

risposta

1

Ho risolto questo problema installando le dipendenze peer in travis hook.
mio .travis.yml assomiglia così:

language: node_js 
node_js: 
    - "6.1" 
    - "5.11" 
    - "4.4" 
before_install: 
    - "npm install peerDependency" 
2

Se un modulo non è nella lista delle dipendenze, ma è necessario per eseguire i test, allora si dovrebbe elencare come un devDependency (indipendentemente dal fatto che si tratta di anche una peerDependency).

Problemi correlati