From a8b7f80659991821e6a13e2b77544a1e51a6797b Mon Sep 17 00:00:00 2001 From: Gervwyk Date: Tue, 13 Oct 2020 18:37:54 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20renderer=20first=20render=20?= =?UTF-8?q?=F0=9F=98=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.js | 26 +++- ...-merge-npm-5.2.0-dfa3a85026-edc100b9c7.zip | Bin 0 -> 20846 bytes ...ldcard-npm-2.0.0-baedca033a-207baede4d.zip | Bin 0 -> 10736 bytes .../src/{connectBlock.js => blockDefaults.js} | 4 +- packages/blockTools/src/getEmotionCss.js | 8 +- packages/blockTools/src/index.js | 4 +- packages/express/config/pages/page1.json | 30 +++- packages/express/package.json | 8 +- .../{webpack.config.js => webpack.common.js} | 5 - packages/express/webpack.dev.js | 12 ++ packages/express/webpack.prod.js | 6 + packages/renderer/package.json | 9 +- packages/renderer/src/Renderer.js | 4 +- packages/renderer/src/page/BindAutoBlock.js | 4 +- .../src/page/{PageContext.js => Page.js} | 56 ++++--- packages/renderer/src/page/block/Block.js | 46 ++++++ .../renderer/src/page/block/CategorySwitch.js | 143 ++++++++++++++++++ .../src/page/{ => block}/Container.js | 8 +- .../renderer/src/page/{ => block}/Context.js | 15 +- packages/renderer/src/page/block/Defaults.js | 6 + .../renderer/src/page/{ => block}/List.js | 8 +- packages/renderer/src/page/block/LoadBlock.js | 41 +++++ .../renderer/src/page/block/WatchCache.js | 52 +++++++ .../src/page/{ => block}/useContext.js | 0 .../{webpack.config.js => webpack.common.js} | 5 - packages/renderer/webpack.dev.js | 12 ++ packages/renderer/webpack.prod.js | 6 + yarn.lock | 19 +++ 28 files changed, 460 insertions(+), 77 deletions(-) create mode 100644 .yarn/cache/webpack-merge-npm-5.2.0-dfa3a85026-edc100b9c7.zip create mode 100644 .yarn/cache/wildcard-npm-2.0.0-baedca033a-207baede4d.zip rename packages/blockTools/src/{connectBlock.js => blockDefaults.js} (95%) rename packages/express/{webpack.config.js => webpack.common.js} (93%) create mode 100644 packages/express/webpack.dev.js create mode 100644 packages/express/webpack.prod.js rename packages/renderer/src/page/{PageContext.js => Page.js} (62%) create mode 100644 packages/renderer/src/page/block/Block.js create mode 100644 packages/renderer/src/page/block/CategorySwitch.js rename packages/renderer/src/page/{ => block}/Container.js (93%) rename packages/renderer/src/page/{ => block}/Context.js (75%) create mode 100644 packages/renderer/src/page/block/Defaults.js rename packages/renderer/src/page/{ => block}/List.js (94%) create mode 100644 packages/renderer/src/page/block/LoadBlock.js create mode 100644 packages/renderer/src/page/block/WatchCache.js rename packages/renderer/src/page/{ => block}/useContext.js (100%) rename packages/renderer/{webpack.config.js => webpack.common.js} (95%) create mode 100644 packages/renderer/webpack.dev.js create mode 100644 packages/renderer/webpack.prod.js diff --git a/.pnp.js b/.pnp.js index 83ac031ff..ad7d7f0fa 100755 --- a/.pnp.js +++ b/.pnp.js @@ -3632,7 +3632,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["react-dom", "virtual:acf8ebf79a461c4f9f2ee32d35604720e52d54fc65cacbf3e944b2ad79cd4f17f95a2cb60cf4b37ca284c4f89981c732c25542cf20e548286d7eb31af1a6edda#npm:17.0.0-rc.3"], ["webpack", "virtual:acf8ebf79a461c4f9f2ee32d35604720e52d54fc65cacbf3e944b2ad79cd4f17f95a2cb60cf4b37ca284c4f89981c732c25542cf20e548286d7eb31af1a6edda#npm:5.0.0"], ["webpack-cli", "virtual:acf8ebf79a461c4f9f2ee32d35604720e52d54fc65cacbf3e944b2ad79cd4f17f95a2cb60cf4b37ca284c4f89981c732c25542cf20e548286d7eb31af1a6edda#npm:3.3.12"], - ["webpack-dev-server", "virtual:acf8ebf79a461c4f9f2ee32d35604720e52d54fc65cacbf3e944b2ad79cd4f17f95a2cb60cf4b37ca284c4f89981c732c25542cf20e548286d7eb31af1a6edda#npm:3.11.0"] + ["webpack-dev-server", "virtual:acf8ebf79a461c4f9f2ee32d35604720e52d54fc65cacbf3e944b2ad79cd4f17f95a2cb60cf4b37ca284c4f89981c732c25542cf20e548286d7eb31af1a6edda#npm:3.11.0"], + ["webpack-merge", "npm:5.2.0"] ], "linkType": "SOFT", }] @@ -3839,7 +3840,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["style-loader", "virtual:e7dd2bdbec1b3ec399e5f3318d0a58728583b58181f43cb8f4f372a1b2b9707e2ffcf76bd80aad3c5c64a731754028a8070020628ca4fa0a02fe260c179762ae#npm:2.0.0"], ["webpack", "virtual:e7dd2bdbec1b3ec399e5f3318d0a58728583b58181f43cb8f4f372a1b2b9707e2ffcf76bd80aad3c5c64a731754028a8070020628ca4fa0a02fe260c179762ae#npm:5.0.0"], ["webpack-cli", "virtual:e7dd2bdbec1b3ec399e5f3318d0a58728583b58181f43cb8f4f372a1b2b9707e2ffcf76bd80aad3c5c64a731754028a8070020628ca4fa0a02fe260c179762ae#npm:3.3.12"], - ["webpack-dev-server", "virtual:e7dd2bdbec1b3ec399e5f3318d0a58728583b58181f43cb8f4f372a1b2b9707e2ffcf76bd80aad3c5c64a731754028a8070020628ca4fa0a02fe260c179762ae#npm:3.11.0"] + ["webpack-dev-server", "virtual:e7dd2bdbec1b3ec399e5f3318d0a58728583b58181f43cb8f4f372a1b2b9707e2ffcf76bd80aad3c5c64a731754028a8070020628ca4fa0a02fe260c179762ae#npm:3.11.0"], + ["webpack-merge", "npm:5.2.0"] ], "linkType": "SOFT", }] @@ -21614,6 +21616,17 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["webpack-merge", [ + ["npm:5.2.0", { + "packageLocation": "./.yarn/cache/webpack-merge-npm-5.2.0-dfa3a85026-edc100b9c7.zip/node_modules/webpack-merge/", + "packageDependencies": [ + ["webpack-merge", "npm:5.2.0"], + ["clone-deep", "npm:4.0.1"], + ["wildcard", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["webpack-sources", [ ["npm:1.4.3", { "packageLocation": "./.yarn/cache/webpack-sources-npm-1.4.3-2b3a9b1de0-2a753b36ad.zip/node_modules/webpack-sources/", @@ -21749,6 +21762,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], + ["wildcard", [ + ["npm:2.0.0", { + "packageLocation": "./.yarn/cache/wildcard-npm-2.0.0-baedca033a-207baede4d.zip/node_modules/wildcard/", + "packageDependencies": [ + ["wildcard", "npm:2.0.0"] + ], + "linkType": "HARD", + }] + ]], ["windows-release", [ ["npm:3.3.3", { "packageLocation": "./.yarn/cache/windows-release-npm-3.3.3-51824464bb-87a218d7e1.zip/node_modules/windows-release/", diff --git a/.yarn/cache/webpack-merge-npm-5.2.0-dfa3a85026-edc100b9c7.zip b/.yarn/cache/webpack-merge-npm-5.2.0-dfa3a85026-edc100b9c7.zip new file mode 100644 index 0000000000000000000000000000000000000000..9dfc78935006689d9f022b55815dc0d2c87d9767 GIT binary patch literal 20846 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%0DZzbDd=7Wtc%-ta}ddb8nO!=R8Zz!MmQZs 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 kJU;7wBU2s ({ ...methods, }); -const connectBlock = (Comp) => { +const blockDefaults = (Comp) => { return ({ actions, blockId, @@ -53,4 +53,4 @@ const connectBlock = (Comp) => { ); }; -export default connectBlock; +export default blockDefaults; diff --git a/packages/blockTools/src/getEmotionCss.js b/packages/blockTools/src/getEmotionCss.js index 2340f71e8..9559c0217 100644 --- a/packages/blockTools/src/getEmotionCss.js +++ b/packages/blockTools/src/getEmotionCss.js @@ -16,17 +16,17 @@ import createEmotion from 'create-emotion'; -const windowContext = window || {}; +let emotionCss = null; const getEmotionCss = () => { try { - if (!windowContext.emotion) { + if (!emotionCss) { const { css } = createEmotion({ container: document.getElementById('emotion'), }); - windowContext.emotion = { css }; + emotionCss = css; } - return windowContext.emotion.css; + return emotionCss; } catch (error) { throw new Error('Emotion failed to initilize: ' + error.message); } diff --git a/packages/blockTools/src/index.js b/packages/blockTools/src/index.js index cc24d5b02..805934f17 100644 --- a/packages/blockTools/src/index.js +++ b/packages/blockTools/src/index.js @@ -14,7 +14,7 @@ limitations under the License. */ -import connectBlock from './connectBlock'; +import blockDefaults from './blockDefaults'; import ErrorBoundary from './ErrorBoundary'; import getEmotionCss from './getEmotionCss'; import Loading from './Loading'; @@ -23,7 +23,7 @@ import mediaToCssObject from './mediaToCssObject.js'; import useRunAfterUpdate from './useRunAfterUpdate'; export { - connectBlock, + blockDefaults, ErrorBoundary, getEmotionCss, Loading, diff --git a/packages/express/config/pages/page1.json b/packages/express/config/pages/page1.json index 7b8757b23..7986fe996 100644 --- a/packages/express/config/pages/page1.json +++ b/packages/express/config/pages/page1.json @@ -1,4 +1,28 @@ { - "id": "page:page1", - "type": "PageSiderMenu" -} \ No newline at end of file + "id": "block:page1:page1", + "blockId": "page1", + "type": "Context", + "meta": { + "url": "http://localhost:3002/remoteEntry.js", + "scope": "lowdefy_blocks_antd", + "module": "Context", + "category": "context" + }, + "areas": { + "content": { + "blocks": [ + { + "id": "block:page1:btn", + "blockId": "btn", + "meta": { + "url": "http://localhost:3002/remoteEntry.js", + "scope": "lowdefy_blocks_antd", + "module": "Button", + "category": "display" + }, + "type": "Button" + } + ] + } + } +} diff --git a/packages/express/package.json b/packages/express/package.json index 1a7276190..44c5ea876 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -22,10 +22,11 @@ "url": "https://github.com/lowdefy/lowdefy.git" }, "scripts": { - "build": "webpack", + "build": "webpack --config webpack.prod.js", "clean": "rm -rf shell/dist", "prepublishOnly": "yarn build", - "start": "nodemon server.js" + "start": "nodemon server.js", + "dev": "webpack-dev-server --open --config webpack.dev.js" }, "dependencies": { "@lowdefy/graphql": "0.0.0-experimental.0", @@ -44,6 +45,7 @@ "html-webpack-plugin": "4.5.0", "webpack": "5.0.0", "webpack-cli": "3.3.12", - "webpack-dev-server": "3.11.0" + "webpack-dev-server": "3.11.0", + "webpack-merge": "5.2.0" } } diff --git a/packages/express/webpack.config.js b/packages/express/webpack.common.js similarity index 93% rename from packages/express/webpack.config.js rename to packages/express/webpack.common.js index eefaffcf5..56af0642b 100644 --- a/packages/express/webpack.config.js +++ b/packages/express/webpack.common.js @@ -6,11 +6,6 @@ const deps = require('./package.json').dependencies; module.exports = { entry: './shell/src/index', - mode: 'production', - devServer: { - contentBase: path.join(__dirname, 'dist'), - port: 3003, - }, output: { path: path.resolve(__dirname, 'shell/dist'), }, diff --git a/packages/express/webpack.dev.js b/packages/express/webpack.dev.js new file mode 100644 index 000000000..1980db6d8 --- /dev/null +++ b/packages/express/webpack.dev.js @@ -0,0 +1,12 @@ +const { merge } = require('webpack-merge'); +const common = require('./webpack.common.js'); +const path = require('path'); + +module.exports = merge(common, { + mode: 'development', + devtool: 'eval-source-map', + devServer: { + contentBase: path.join(__dirname, 'dist'), + port: 3001, + }, +}); diff --git a/packages/express/webpack.prod.js b/packages/express/webpack.prod.js new file mode 100644 index 000000000..ed0670ee1 --- /dev/null +++ b/packages/express/webpack.prod.js @@ -0,0 +1,6 @@ +const { merge } = require('webpack-merge'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + mode: 'production', +}); diff --git a/packages/renderer/package.json b/packages/renderer/package.json index a2809a1fd..e6b4f255b 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -54,13 +54,14 @@ "style-loader": "2.0.0", "webpack": "5.0.0", "webpack-cli": "3.3.12", - "webpack-dev-server": "3.11.0" + "webpack-dev-server": "3.11.0", + "webpack-merge": "5.2.0" }, "scripts": { - "start": "webpack-dev-server", - "build": "webpack --mode production", + "build": "webpack --config webpack.prod.js", + "clean": "rm -rf dist", "prepublishOnly": "yarn build", "serve": "serve dist -p 3001", - "clean": "rm -rf dist" + "start": "webpack-dev-server --config webpack.dev.js" } } diff --git a/packages/renderer/src/Renderer.js b/packages/renderer/src/Renderer.js index fefc36086..015f648ba 100644 --- a/packages/renderer/src/Renderer.js +++ b/packages/renderer/src/Renderer.js @@ -22,7 +22,7 @@ import { ErrorBoundary } from '@lowdefy/block-tools'; import get from '@lowdefy/get'; import useGqlClient from './utils/graphql/useGqlClient'; -import PageContext from './page/PageContext'; +import Page from './page/Page'; // eslint-disable-next-line no-undef const windowContext = window; @@ -118,7 +118,7 @@ const Root = () => { - + diff --git a/packages/renderer/src/page/BindAutoBlock.js b/packages/renderer/src/page/BindAutoBlock.js index ca0cf370b..3ab5dd3b2 100644 --- a/packages/renderer/src/page/BindAutoBlock.js +++ b/packages/renderer/src/page/BindAutoBlock.js @@ -16,7 +16,7 @@ import React, { Suspense } from 'react'; import { useQuery, gql } from '@apollo/client'; -import { Loading, makeCssClass, connectBlock, ErrorBoundary } from '@lowdefy/block-tools'; +import { Loading, makeCssClass, blockDefaults, ErrorBoundary } from '@lowdefy/block-tools'; import AutoBlock from './AutoBlock'; import prepareBlock from './prepareBlock'; @@ -72,7 +72,7 @@ const BindAutoBlock = ({ block, Blocks, context, pageId, rootContext }) => { { const { search } = useLocation(); rootContext.urlQuery = urlQuery.parse(search || ''); const { loading, error, data } = useQuery(GET_PAGE, { - variables: { id: pageId, branch: rootContext.branch }, + variables: { id: pageId }, }); if (loading) { console.log('loading'); - return Loading; + return ; } // if (error) throw error; if (error) { console.log(error); return
Error
; } - console.log('finished loading'); // redirect 404 if (!data.page) return ; - console.log('data', data.page); - const Component = prepareBlock({ - block: data.page, - Components: rootContext.Components, - }); - return ( <>
Hello
- }> - - + { + console.log('Page', context); + return ( + + ); + }} + />
); diff --git a/packages/renderer/src/page/block/Block.js b/packages/renderer/src/page/block/Block.js new file mode 100644 index 000000000..4e42d01a1 --- /dev/null +++ b/packages/renderer/src/page/block/Block.js @@ -0,0 +1,46 @@ +import React, { Suspense } from 'react'; + +import { ErrorBoundary, Loading } from '@lowdefy/block-tools'; + +import LoadBlock from './LoadBlock'; +import Defaults from './Defaults'; +import CategorySwitch from './CategorySwitch'; +import WatchCache from './WatchCache'; + +const Block = ({ block, Blocks, context, pageId, rootContext }) => { + return ( + + }> + ( + { + console.log('block', context); + return ( + ( + + )} + /> + ); + }} + /> + )} + /> + + + ); +}; + +export default Block; diff --git a/packages/renderer/src/page/block/CategorySwitch.js b/packages/renderer/src/page/block/CategorySwitch.js new file mode 100644 index 000000000..7b6db79d2 --- /dev/null +++ b/packages/renderer/src/page/block/CategorySwitch.js @@ -0,0 +1,143 @@ +/* + Copyright 2020 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React from 'react'; +import { BlockLayout } from '@lowdefy/layout'; +import { makeContextId } from '@lowdefy/engine'; +import { makeCssClass } from '@lowdefy/block-tools'; + +import Container from './Container'; +import Context from './Context'; +import List from './List'; + +const CategorySwitch = ({ block, Blocks, Component, context, pageId, rootContext }) => { + switch (block.meta.category) { + case 'context': + return ( + ( + + )} + /> + ); + case 'list': + return ( + + ); + case 'container': + return ( + + ); + case 'input': + return ( + + + + ); + default: + return ( + + + + ); + } +}; + +export default CategorySwitch; diff --git a/packages/renderer/src/page/Container.js b/packages/renderer/src/page/block/Container.js similarity index 93% rename from packages/renderer/src/page/Container.js rename to packages/renderer/src/page/block/Container.js index 43ebb6007..2afe20b2e 100644 --- a/packages/renderer/src/page/Container.js +++ b/packages/renderer/src/page/block/Container.js @@ -16,11 +16,11 @@ import React from 'react'; import { Area, BlockLayout, layoutParamsToArea } from '@lowdefy/layout'; -import { connectBlock, makeCssClass } from '@lowdefy/block-tools'; +import { blockDefaults, makeCssClass } from '@lowdefy/block-tools'; -import BindAutoBlock from './BindAutoBlock'; +import Block from './Block'; -const ConnectedArea = connectBlock(Area); +const ConnectedArea = blockDefaults(Area); const Container = ({ block, Blocks, Component, context, pageId, rootContext }) => { const content = {}; @@ -41,7 +41,7 @@ const Container = ({ block, Blocks, Component, context, pageId, rootContext }) = makeCssClass={makeCssClass} > {areas[areaKey].blocks.map((bl) => ( - { +const Context = ({ block, contextId, pageId, render, rootContext }) => { const { context, loading, error } = useContext({ block, pageId, rootContext, contextId }); if (loading) { + // TODO return ( { } if (error) throw error; - return ( - - ); + return render(context); }; export default Context; diff --git a/packages/renderer/src/page/block/Defaults.js b/packages/renderer/src/page/block/Defaults.js new file mode 100644 index 000000000..71ba5c5ca --- /dev/null +++ b/packages/renderer/src/page/block/Defaults.js @@ -0,0 +1,6 @@ +import React from 'react'; +import { blockDefaults } from '@lowdefy/block-tools'; + +const Defaults = ({ Component, render }) => render(blockDefaults(Component)); + +export default Defaults; diff --git a/packages/renderer/src/page/List.js b/packages/renderer/src/page/block/List.js similarity index 94% rename from packages/renderer/src/page/List.js rename to packages/renderer/src/page/block/List.js index b5e760cf0..cd388d473 100644 --- a/packages/renderer/src/page/List.js +++ b/packages/renderer/src/page/block/List.js @@ -16,11 +16,11 @@ import React from 'react'; import { Area, BlockLayout, layoutParamsToArea } from '@lowdefy/layout'; -import { connectBlock, makeCssClass } from '@lowdefy/block-tools'; +import { blockDefaults, makeCssClass } from '@lowdefy/block-tools'; -import BindAutoBlock from './BindAutoBlock'; +import Block from './Block'; -const ConnectedArea = connectBlock(Area); +const ConnectedArea = blockDefaults(Area); const List = ({ block, Blocks, Component, context, pageId, rootContext }) => { const content = {}; @@ -41,7 +41,7 @@ const List = ({ block, Blocks, Component, context, pageId, rootContext }) => { makeCssClass={makeCssClass} > {SBlock.areas[areaKey].blocks.map((bl) => ( - { + const typeId = `${meta.scope}:${meta.module}`; + console.log('LoadBlock', meta); + const { ready, failed } = useDynamicScript({ + url: meta.url, + }); + if (!Components[typeId]) { + if (!ready) { + return

Loading dynamic script: {meta.url}

; + } + if (failed) { + return

Failed to load dynamic script: {meta.url}

; + } + Components[typeId] = lazy(loadComponent(meta.scope, meta.module)); + } + return render(Components[typeId]); +}; + +export default LoadBlock; diff --git a/packages/renderer/src/page/block/WatchCache.js b/packages/renderer/src/page/block/WatchCache.js new file mode 100644 index 000000000..ace2936da --- /dev/null +++ b/packages/renderer/src/page/block/WatchCache.js @@ -0,0 +1,52 @@ +/* + Copyright 2020 Lowdefy, Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import React from 'react'; +import { useQuery, gql } from '@apollo/client'; + +const getBlock = gql` + query getBlock($id: String!) { + block(id: $id) @client { + id + t + } + } +`; + +const WatchCache = ({ block, render, rootContext }) => { + console.log('watch', block); + const { loading, error, data } = useQuery(getBlock, { + variables: { + id: `BlockClass:${block.id}`, + }, + client: rootContext.client, + }); + + if (loading) return 'Loading cache'; + if (error) throw error; + + // // TODO: move to switch + // if (block.eval.visible === false) + // return
; + console.log(block.id, data); + if (data.block.loading) { + return 'Loading data.block.loading'; + } + console.log('PASS'); + return render(); +}; + +export default WatchCache; diff --git a/packages/renderer/src/page/useContext.js b/packages/renderer/src/page/block/useContext.js similarity index 100% rename from packages/renderer/src/page/useContext.js rename to packages/renderer/src/page/block/useContext.js diff --git a/packages/renderer/webpack.config.js b/packages/renderer/webpack.common.js similarity index 95% rename from packages/renderer/webpack.config.js rename to packages/renderer/webpack.common.js index 4316d9519..357a72ff2 100644 --- a/packages/renderer/webpack.config.js +++ b/packages/renderer/webpack.common.js @@ -7,11 +7,6 @@ const deps = require('./package.json').dependencies; module.exports = { entry: './src/index', - mode: 'development', - devServer: { - contentBase: path.join(__dirname, 'dist'), - port: 3001, - }, output: { path: path.resolve(__dirname, 'dist'), }, diff --git a/packages/renderer/webpack.dev.js b/packages/renderer/webpack.dev.js new file mode 100644 index 000000000..1980db6d8 --- /dev/null +++ b/packages/renderer/webpack.dev.js @@ -0,0 +1,12 @@ +const { merge } = require('webpack-merge'); +const common = require('./webpack.common.js'); +const path = require('path'); + +module.exports = merge(common, { + mode: 'development', + devtool: 'eval-source-map', + devServer: { + contentBase: path.join(__dirname, 'dist'), + port: 3001, + }, +}); diff --git a/packages/renderer/webpack.prod.js b/packages/renderer/webpack.prod.js new file mode 100644 index 000000000..ed0670ee1 --- /dev/null +++ b/packages/renderer/webpack.prod.js @@ -0,0 +1,6 @@ +const { merge } = require('webpack-merge'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + mode: 'production', +}); diff --git a/yarn.lock b/yarn.lock index 45726fb1a..67e4fe802 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2846,6 +2846,7 @@ __metadata: webpack: 5.0.0 webpack-cli: 3.3.12 webpack-dev-server: 3.11.0 + webpack-merge: 5.2.0 languageName: unknown linkType: soft @@ -3035,6 +3036,7 @@ __metadata: webpack: 5.0.0 webpack-cli: 3.3.12 webpack-dev-server: 3.11.0 + webpack-merge: ^5.2.0 languageName: unknown linkType: soft @@ -18001,6 +18003,16 @@ fsevents@^1.2.7: languageName: node linkType: hard +"webpack-merge@npm:5.2.0, webpack-merge@npm:^5.2.0": + version: 5.2.0 + resolution: "webpack-merge@npm:5.2.0" + dependencies: + clone-deep: ^4.0.1 + wildcard: ^2.0.0 + checksum: edc100b9c7cfc675d1e1857afd6a194daa1756d140eda9da452e4f73933307a9af7a485a94b68ef29dfa3047f69e34d6ca724e5858109ed287f32b79c0c0d11b + languageName: node + linkType: hard + "webpack-sources@npm:^1.4.3": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" @@ -18168,6 +18180,13 @@ fsevents@^1.2.7: languageName: node linkType: hard +"wildcard@npm:^2.0.0": + version: 2.0.0 + resolution: "wildcard@npm:2.0.0" + checksum: 207baede4d6d41fc1aefcc4727c95ca6f29eaaf4d66478665fe0ac17232709637426ae96fd79deb3b68da3564e7bde7f2be63e5c3665ac8f63ee92364c0a2dd3 + languageName: node + linkType: hard + "windows-release@npm:^3.1.0": version: 3.3.3 resolution: "windows-release@npm:3.3.3"