Sto cercando di utilizzare il rendering isomorfo in React in modo da poter generare HTML statici come documentazione per la mia applicazione.Posso rilevare se il mio script è stato elaborato da Webpack?
Il problema è che ho un componente particolare che gira solo sul client, perché fa riferimento a window
. La soluzione è ovvia: non renderlo sul server. Sì, non posso renderlo sul server, ma ancora, ho bisogno che sia incluso nel mio pacchetto webpack
così posso renderlo sul client. Il problema è che, il codice che impedisce la mia componente dal rendering sul server è:
function isServer() {
return ! (typeof window != 'undefined' && window.document);
}
Ma isServer()
è anche true
quando webpack
è bundling, e voglio farlo funzionare normalmente mentre webpack
è in esecuzione.
Quindi, come si rileva che webpack
è in esecuzione?
Sto cercando qualcosa di simile:
function isWebpack() {
// what do I put here?
}
ora posso rendere la mia componente client-only normalmente se isServer()
e !isWebpack()
.
Grazie!
EDIT
Questo è il componente che sto cercando di costruire:
function isServer() {
return ! (typeof window != 'undefined' && window.document);
}
import React from 'react';
const LED = React.createClass({
render: function() {
if(!isServer()) {
var LiveSchemaEditor = require('../../src/components/LiveSchemaEditor.js');
return <LiveSchemaEditor />;
}
return <div>I AM IN THE SERVER</div>;
}
});
export default LED;
Quello che mi rode è che il fascio webpack
include il contenuto del LiveSchemaEditor.js
ma esso stampa ancora I AM IN THE SERVER
mentre sul client . Questo non ha senso.
Verificare se qualcosa funziona come nodo? 'function isNode() {return process && typeof process.env === 'object' && Object.keys (process.env).lunghezza; } 'Nel browser, che restituisce' 0', ma in esecuzione nel nodo, sarà> 0. Oppure cerca solo questo: https://nodejs.org/docs/latest/api/process.html#process .versione – m59
@ m59, grazie, ma ciò restituirà true durante il rendering del server. Ho bisogno di qualcosa che ritorni vero solo se webpack è in esecuzione. Se potessi impostare 'process.env.NODE_ENV' specificatamente per quando webpack è in esecuzione, ciò farebbe il trucco. –
Non utilizzo webpack, quindi potresti mostrarmi come impostare la circostanza a cui ti riferisci? Webpack sta effettivamente eseguendo il tuo codice? – m59