From 1439a3c6d41da2d91e2ac8e3e1d46af29df08222 Mon Sep 17 00:00:00 2001 From: Prateek Bhatnagar Date: Mon, 20 May 2019 08:37:30 -0700 Subject: [PATCH 1/5] using same version of preact for pre-rendering --- packages/cli/lib/lib/webpack/webpack-server-config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/cli/lib/lib/webpack/webpack-server-config.js b/packages/cli/lib/lib/webpack/webpack-server-config.js index 22ec1f6fc..57fc2a250 100644 --- a/packages/cli/lib/lib/webpack/webpack-server-config.js +++ b/packages/cli/lib/lib/webpack/webpack-server-config.js @@ -14,6 +14,9 @@ function serverConfig(env) { chunkFilename: '[name].chunk.[chunkhash:5].js', libraryTarget: 'commonjs2', }, + externals: { + preact: require.resolve('preact'), + }, target: 'node', resolveLoader: { alias: { From c03d22d3056278d407ee5dd6eb72a4999ef5de19 Mon Sep 17 00:00:00 2001 From: Prateek Bhatnagar Date: Mon, 20 May 2019 08:45:12 -0700 Subject: [PATCH 2/5] adding explainer --- packages/cli/lib/lib/webpack/webpack-server-config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/cli/lib/lib/webpack/webpack-server-config.js b/packages/cli/lib/lib/webpack/webpack-server-config.js index 57fc2a250..ed608ce04 100644 --- a/packages/cli/lib/lib/webpack/webpack-server-config.js +++ b/packages/cli/lib/lib/webpack/webpack-server-config.js @@ -15,6 +15,10 @@ function serverConfig(env) { libraryTarget: 'commonjs2', }, externals: { + /** This makes pre-rendered bundle use the same preact as preact-cli. + * This is needed for the options object of preact-x. + * Note: This means any upgrade of preact in user land will not affect pre-rendered bundle. + */ preact: require.resolve('preact'), }, target: 'node', From 548222817010b6fb5e1e870fd5b6316a042a97c9 Mon Sep 17 00:00:00 2001 From: Prateek Bhatnagar Date: Mon, 20 May 2019 16:16:46 -0700 Subject: [PATCH 3/5] uses preact and preact-render-to-string from user land --- packages/cli/lib/lib/webpack/prerender.js | 15 ++++++++++----- .../cli/lib/lib/webpack/webpack-server-config.js | 6 +----- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/cli/lib/lib/webpack/prerender.js b/packages/cli/lib/lib/webpack/prerender.js index f75a84ced..d0e3f052e 100644 --- a/packages/cli/lib/lib/webpack/prerender.js +++ b/packages/cli/lib/lib/webpack/prerender.js @@ -1,6 +1,6 @@ const { red, yellow } = require('kleur'); const { resolve } = require('path'); -const { readFileSync } = require('fs'); +const { readFileSync, existsSync } = require('fs'); const stackTrace = require('stack-trace'); const { SourceMapConsumer } = require('source-map'); @@ -24,10 +24,15 @@ module.exports = function(env, params) { ); return ''; } - - let preact = require('preact'), - renderToString = require('preact-render-to-string'); - + const { cwd } = env; + const preactPath = require.resolve(`${cwd}/node_modules/preact`); + const renderToStringPath = require.resolve( + `${cwd}/node_modules/preact-render-to-string` + ); + let preact = require(preactPath), + renderToString = require(existsSync(renderToStringPath) + ? renderToStringPath + : 'preact-render-to-string'); return renderToString(preact.h(app, { ...params, url })); } catch (err) { let stack = stackTrace.parse(err).filter(s => s.getFileName() === entry)[0]; diff --git a/packages/cli/lib/lib/webpack/webpack-server-config.js b/packages/cli/lib/lib/webpack/webpack-server-config.js index ed608ce04..1a1b6815f 100644 --- a/packages/cli/lib/lib/webpack/webpack-server-config.js +++ b/packages/cli/lib/lib/webpack/webpack-server-config.js @@ -15,11 +15,7 @@ function serverConfig(env) { libraryTarget: 'commonjs2', }, externals: { - /** This makes pre-rendered bundle use the same preact as preact-cli. - * This is needed for the options object of preact-x. - * Note: This means any upgrade of preact in user land will not affect pre-rendered bundle. - */ - preact: require.resolve('preact'), + preact: 'preact', }, target: 'node', resolveLoader: { From 639fa088d34b74b3d3e17e9536c31c119e9312d6 Mon Sep 17 00:00:00 2001 From: Prateek Bhatnagar Date: Tue, 21 May 2019 13:32:29 -0700 Subject: [PATCH 4/5] use preact and render to string from user land always --- packages/cli/lib/lib/webpack/prerender.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/cli/lib/lib/webpack/prerender.js b/packages/cli/lib/lib/webpack/prerender.js index d0e3f052e..99a163283 100644 --- a/packages/cli/lib/lib/webpack/prerender.js +++ b/packages/cli/lib/lib/webpack/prerender.js @@ -1,6 +1,6 @@ const { red, yellow } = require('kleur'); const { resolve } = require('path'); -const { readFileSync, existsSync } = require('fs'); +const { readFileSync } = require('fs'); const stackTrace = require('stack-trace'); const { SourceMapConsumer } = require('source-map'); @@ -25,14 +25,10 @@ module.exports = function(env, params) { return ''; } const { cwd } = env; - const preactPath = require.resolve(`${cwd}/node_modules/preact`); - const renderToStringPath = require.resolve( - `${cwd}/node_modules/preact-render-to-string` - ); - let preact = require(preactPath), - renderToString = require(existsSync(renderToStringPath) - ? renderToStringPath - : 'preact-render-to-string'); + let preact = require(require.resolve(`${cwd}/node_modules/preact`)), + renderToString = require(require.resolve( + `${cwd}/node_modules/preact-render-to-string` + )); return renderToString(preact.h(app, { ...params, url })); } catch (err) { let stack = stackTrace.parse(err).filter(s => s.getFileName() === entry)[0]; From 6254c6f39c52ec87b3d3c2eb59305301409684fa Mon Sep 17 00:00:00 2001 From: Leah Date: Tue, 28 May 2019 20:38:33 +0200 Subject: [PATCH 5/5] separate variables --- packages/cli/lib/lib/webpack/prerender.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/cli/lib/lib/webpack/prerender.js b/packages/cli/lib/lib/webpack/prerender.js index 99a163283..bb4464e66 100644 --- a/packages/cli/lib/lib/webpack/prerender.js +++ b/packages/cli/lib/lib/webpack/prerender.js @@ -25,10 +25,12 @@ module.exports = function(env, params) { return ''; } const { cwd } = env; - let preact = require(require.resolve(`${cwd}/node_modules/preact`)), - renderToString = require(require.resolve( - `${cwd}/node_modules/preact-render-to-string` - )); + + const preact = require(require.resolve(`${cwd}/node_modules/preact`)); + const renderToString = require(require.resolve( + `${cwd}/node_modules/preact-render-to-string` + )); + return renderToString(preact.h(app, { ...params, url })); } catch (err) { let stack = stackTrace.parse(err).filter(s => s.getFileName() === entry)[0];