Sto costruendo un'applicazione isomorfa React/React-Router/Redux/Webpack e sto tentando di implementare il rendering lato server.Alias Webpack in Node JS Server code
mio elenco assomiglia:
/client
/actions
/components
/containers
/server
/server.js
Nel mio webpack config, ho alias impostati per tutte le cartelle all'interno del client:
var path_base = path.resolve(__dirname, '..');
const resolve = path.resolve;
const base = function() {
var args = [path_base];
args.push.apply(args, arguments);
return resolve.apply(resolve,args);
};
const resolve_alias = base.bind(null, 'src/client');
const aliases = [
'actions',
'components',
'constants',
'containers',
'middleware',
'reducers',
'routes',
'store',
'styles',
'utils',
'validation'
];
in modo che all'interno del codice che viene fornito in bundle con webpack , Posso fare:
import { Widget } from 'components';
e che l'importazione viene risolta dal webpack.
Ora nel mio codice server, per eseguire il rendering, devo importare alcuni dei miei file client, come routes/index.js
. Il problema che sto incontrando quando importare il mio file di rotte, è quello di utilizzare un alias di un pacchetto Web in un altro file, ad esempio components
o containers
quindi, in modo naturale, il nodo js richiede che il sistema non possa risolverlo.
Come aggiustare qualcosa del genere? Ho guardato su this question e si tratta essenzialmente di impostare gli stessi alias esistenti nel webpack con mock-require. Ma poi il problema diventa che il mio file di rotte importa tutti i miei componenti che poi importano cose come fogli di stile, immagini, ecc. Dovrei quindi usare qualcosa come webpack-isomorphic-tools?
Le guide che ho visto (this per esempio) sono tutte ottime per mostrare come viene eseguito il rendering lato server ma nessuno di loro parla realmente di come risolvere tutte le richieste e quant'altro.
suona come ci sono diverse domande qui: (a) come faccio a utilizzare gli alias durante l'esecuzione sul lato server, e (b) Come si gestiscono le risorse inclusi come fogli di stile sul server. Una soluzione è eseguire anche il codice del server attraverso il webpack. Puoi usare 'target: node' nella tua configurazione e lo ottimizzerà per il nodo durante la compilazione (cioè non includerà i nodi inclusi). Lo faccio a volte per codice che usa Babel. A corto di fare una build, sicuramente non usare alias. Qualsiasi soluzione sarà hacky al meglio. –
Perché non dovrei usare alias? – barndog
Gli alias vanno bene quando si esegue * build * con webpack. Il tuo problema è che stai usando alias in una build del webpack e stai cercando di far funzionare lo stesso codice * al di fuori * di una build del webpack. Il mio punto era che per usare gli alias, è necessario creare anche il codice del server (il che farà sì che gli alias funzionino bene). Senza la build, l'unico modo per far funzionare gli alias è hackerarlo insieme, che è dove si trova il tuo problema. Gli hacker sono cattivi, quindi usa gli alias e costruisci anche il tuo codice server o semplicemente abbandoni gli alias. –