2015-05-11 24 views
9

mio package.json include webpack e alcuni caricatori:Come conciliare webpack globale installare e caricatori locali

"devDependencies": { 
    "babel-core": "^5.2.17", 
    "babel-loader": "^5.0.0", 
    "jsx-loader": "^0.13.2", 
    "node-libs-browser": "^0.5.0", 
    "webpack": "^1.9.4" 
} 

Quando eseguo webpack non è nel mio cammino in modo che non mostra come si trova. Ho installato a livello globale npm install -g webpack in modo che il binario apparirebbe nel mio percorso, ma poi non riesce a trovare i moduli loader che sono stati installati in ./node_modules che ha bisogno di elaborare il mio albero delle dipendenze:

$ webpack --progress --colors --watch 
10% 0/1 build modules/usr/local/lib/node_modules/webpack/node_modules/webpack-core/lib/NormalModuleMixin.js:206 
       throw e; 
        ^
Error: Cannot find module 'jstransform/simple'``` 

Qual è la soluzione preferita Qui?

posso installare i miei caricatori a livello globale, ma non mi piace che a causa della cross-project emette

posso provare a correre webpack di node_modules (non so come a dire il vero, aggiungerlo al $PATH per ogni progetto?)

Oppure posso provare a dare il mio accesso Web globale alla mia cartella node_modules, che sembra anch'essa hacky.

Ho fatto qualcosa di sbagliato, o c'è un modo migliore, approvato dalla comunità, intorno a questo problema forse comune?

risposta

19

Ho un post sul blog chiamato Managing Per-Project Interpreters and the PATH che descrive la mia metodologia per questo. Riassumo qui per rispondere ad alcune delle vostre domande chiave.

Qual è la soluzione preferita qui?

Mai (davvero, letteralmente mai) utilizzare npm -g. Installa semplicemente normalmente all'interno del tuo progetto. Usa la tua shell per impostare il PERCORSO in modo appropriato. Io uso zsh per farlo automaticamente come dettagliato nel post del blog qui sopra, quindi se I cd in un progetto con ./node_modules/.bin, viene messo sul mio PATH automaticamente.

Esistono altri modi, tra cui la creazione di alias come alias webpack="./node_modules/.bin/webpack" e così via. Ma abbraccia davvero cambiando il PERCORSO e avrai l'esperienza a lungo termine più armoniosa. Le esigenze di uno sviluppatore multiprogetto non sono soddisfatte dalla vecchia scuola unix che vive in/bin o in/usr/bin.

  • Se si utilizzano script NPM (il tasto "script" nella vostra package.json), NPM include automaticamente ./node_modules/.bin nel PATH durante questi script in modo da poter semplicemente eseguire comandi e saranno trovati. Quindi usa gli script npm e se fai uso di script di shell è facile fare semplicemente export PATH="$PWD/node_modules/.bin:$PATH".
4

Tutti i file binari forniti con i pacchetti definiti nelle dipendenze devono essere collocati sotto ./node_modules/.bin, quindi dovresti essere in grado di accedervi, ad esempio ./node_modules/.bin/webpack.

In alternativa, è possibile definire uno script all'interno del proprio package.json, che consentirebbe di eseguire qualcosa come npm run webpack come alias.

+0

Ha abbastanza bandiere su di esso che sembra ergonomico utilizzare comunque una definizione di script npm, quindi mi piace questa seconda opzione. Aspetterò qualche minuto per una risposta migliore se ce n'è una ;-) –

Problemi correlati