2015-07-29 7 views
5

OBIETTIVO: Sto cercando di impostare un progetto in nodejs e webpack tale che la funzione richiede può utilizzare la directory di progetto come root, quindi posso richiedere con percorso assoluto relativo alla radice del progetto in entrambi gli ambienti (utilizza isomorphic ad esempio server React + rendering client).Webpack e Nodejs isomorfo richiedono con il percorso assoluto

ESIGENZE: In webpack è possibile impostare il config.resolve.root per farlo funzionare, ma in nodejs, la sua migliore prassi di non sovrascrivere/modificare il global.require.

PROPOSITION 1: Posso fare una nuova funzione globale

global.p_require 

quindi funziona in nodo; tuttavia, non riesco a trovare un modo per consentire a webpack di analizzare "p_require" in __webpack_require__ senza modificare il codice sorgente del webpack.

PROPOSITION 2: posso fare una nuova variabile globale

global.ROOT_DIR = process.cwd() 

quindi funziona in nodo da

require(ROOT_DIR + <relative path to root>); 

tuttavia, webpack riconoscerebbe questo come dinamico richiedono. Esiste un modo tale che il webpack possa analizzare ROOT_DIR? Ho già provato il plug-in Define, ma sembra caricarsi dopo che il necessario è stato analizzato da webpack.

DOMANDA

qualcuno ha una soluzione o si trova di fronte lo stesso problema?

+0

Hai provato a impostare 'NODE_PATH' prima di eseguire webpack e server? 'NODE_PATH = webpack',' NODE_PATH = node server.js' – rockingskier

+0

Ho provato questo. Ma il problema è che cosa succede qui https://gist.github.com/branneman/8048520 (non sempre il miglior attacco) – user2255895

+0

ha solo lo stesso problema qui .. hai trovato la soluzione? – egig

risposta

1

Mi sto occupando di questo lasciando che il webpack faccia di più; invece di "nodo e webpack", è "webpack: client e server". Ho un webpack per creare una build per il client e una build per il server (quest'ultimo usa il 'nodo' come proprietà di destinazione in config). È facile personalizzare le directory che Webpack usa per richiedere, quindi lascia che faccia il suo lavoro e crei una build per il nodo.

Durante il rendering sul server, è sufficiente la compilazione del server compilato. Se è necessario passare alcune cose dal server all'applicazione creata dal webpack, collegarlo nel punto di ingresso che si utilizza per la build del server: il webpack lo creerà come un modulo commonJs, in modo che il punto di ingresso possa esportare qualsiasi cosa è l'interfaccia più comoda quando il server deve eseguire il rendering.