Add HMR support #2303

Merged
skhameneh merged 8 commits from webpack-rebase into master 2019-03-05 19:40:12 +01:00
15 changed files with 175 additions and 68 deletions

View file

@ -1,9 +1,10 @@
{
"presets": ["@babel/react", "@babel/flow"],
"plugins": [
["@babel/plugin-proposal-decorators", { "decoratorsBeforeExport": true }],
"@babel/plugin-transform-flow-strip-types",
"@babel/plugin-proposal-class-properties",
"babel-plugin-add-module-exports"
"react-hot-loader/babel",
["@babel/plugin-proposal-decorators", { "decoratorsBeforeExport": true }],
"@babel/plugin-transform-flow-strip-types",
"@babel/plugin-proposal-class-properties",
"babel-plugin-add-module-exports"
]
}

View file

@ -4,6 +4,23 @@
"directories": {
"output": "dist/electron"
},
"files": [
{
"from": "dist/electron",
"to": "./",
"filter": ["!dist/!electron/**/*"]
},
{
"from": "dist/electron/static",
"to": "./",
"filter": ["!dist/!electron/static/**/*"]
},
{
"from": "dist/electron/ui",
"to": "./",
"filter": ["!dist/!electron/ui/**/*"]
}
],
"publish": [
{
"provider": "s3",
@ -50,8 +67,7 @@
"executableName": "LBRY",
"category": "AudioVideo;Video",
"desktop": {
"MimeType": "x-scheme-handler/lbry",
"Exec": "/opt/LBRY/lbry %U"
"MimeType": "x-scheme-handler/lbry"
}
},
"deb": {

View file

@ -18,21 +18,25 @@
"name": "LBRY Inc.",
"email": "hello@lbry.io"
},
"main": "./dist/main/main.js",
"main": "./dist/electron/main.js",
"scripts": {
"compile:electron": "webpack --progress --config webpack.electron.config.js",
"compile:web": "webpack --progress --config webpack.web.config.js",
"compile": "yarn compile:electron && yarn compile:web",
"build": "yarn compile && electron-builder build",
"build:dir": "yarn build -- --dir -c.compression=store -c.mac.identity=null",
"dev:electron": "yarn compile:electron && electron ./dist/electron/main/bundle.js",
"dev:electron": "webpack-dev-server --hot --progress --config webpack.electron.config.js",
"dev:web": "webpack-dev-server --hot --progress --config webpack.web.config.js",
"dev:internal-apis": "LBRY_API_URL='http://localhost:8080' yarn dev:electron",
"lint": "eslint 'src/**/*.{js,jsx}' --fix && flow",
"format": "prettier 'src/**/*.{js,jsx,scss,json}' --write",
"flow-defs": "flow-typed install",
"precommit": "lint-staged",
"preinstall": "yarn cache clean lbry-redux && yarn cache clean lbryinc",
"postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js"
"postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js",
"run:electron": "electron ./dist/electron/main.js",
"pack": "electron-builder --dir",
"dist": "electron-builder"
},
"dependencies": {
"@babel/polyfill": "^7.2.5",
neb-b commented 2019-03-05 16:42:20 +01:00 (Migrated from github.com)
Review

Do we need this if we have build and build:dir?

Do we need this if we have `build` and `build:dir`?
skhameneh commented 2019-03-05 18:43:05 +01:00 (Migrated from github.com)
Review

Don't need either, I put these here both for convenience and testing.
Can remove, I left them thinking that can be nice to have locally

Don't need either, I put these here both for convenience and testing. Can remove, I left them thinking that can be nice to have locally
neb-b commented 2019-03-05 19:01:06 +01:00 (Migrated from github.com)
Review

I'll keep them. Eventually I'd like to clean up some of the scripts though

I'll keep them. Eventually I'd like to clean up some of the scripts though
@ -73,7 +77,7 @@
"react-paginate": "^5.2.1",
"react-pose": "^4.0.5",
"react-redux": "^5.0.3",
"react-simplemde-editor": "^3.6.16",
"react-simplemde-editor": "^4.0.0",
"react-toggle": "^4.0.2",
"redux": "^3.6.0",
"redux-persist": "^4.8.0",
@ -86,7 +90,6 @@
"render-media": "^3.1.0",
"reselect": "^3.0.0",
"semver": "^5.3.0",
"source-map-support": "^0.5.10",
"stream-to-blob-url": "^2.1.1",
"three": "^0.93.0",
"three-full": "^11.3.2",
@ -138,10 +141,12 @@
"node-sass": "^4.11.0",
"preprocess-loader": "^0.3.0",
"prettier": "^1.11.1",
"react-hot-loader": "^4.7.2",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"webpack": "^4.28.4",
"webpack-build-notifier": "^0.1.23",
"webpack-dev-middleware": "^3.6.0",
"webpack-dev-server": "^3.1.14",
"webpack-merge": "^4.2.1",
"webpack-node-externals": "^1.7.2",

View file

@ -36,7 +36,7 @@ export default appState => {
};
const rendererURL = isDev // ? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`
? `file://${path.resolve(__dirname, '../index.html')}`
? `http://localhost:8080/index.dev.html`
: `file://${__dirname}/index.html`;
let window = new BrowserWindow(windowConfiguration);

View file

@ -1,3 +1,4 @@
import { hot } from 'react-hot-loader/root';
import { connect } from 'react-redux';
import {
selectPageTitle,
@ -29,7 +30,9 @@ const perform = dispatch => ({
toggleEnhancedLayout: () => dispatch(doToggleEnhancedLayout()),
});
export default connect(
select,
perform
)(App);
export default hot(
connect(
select,
perform
)(App)
);

View file

@ -3,7 +3,7 @@ import * as React from 'react';
import ReactDOMServer from 'react-dom/server';
import MarkdownPreview from 'component/common/markdown-preview';
import SimpleMDE from 'react-simplemde-editor';
import 'simplemde/dist/simplemde.min.css'; // eslint-disable-line import/no-extraneous-dependencies
import 'easymde/dist/easymde.min.css'; // eslint-disable-line import/no-extraneous-dependencies
import Toggle from 'react-toggle';
import { openEditorMenu, stopContextMenu } from 'util/context-menu';

View file

@ -24,7 +24,7 @@ class WalletAddress extends React.PureComponent<Props, State> {
showQR: false,
};
this.toggleQR = this.toggleQR.bind(this);
(this: any).toggleQR = this.toggleQR.bind(this);
}
componentWillMount() {
@ -36,8 +36,6 @@ class WalletAddress extends React.PureComponent<Props, State> {
}
}
toggleQR: Function;
toggleQR() {
this.setState({
showQR: !this.state.showQR,

View file

@ -11,6 +11,8 @@ const i18n = y18n({
const i18n = {
setLocale: () => {},
getLocale: () => {},
__: x => x,
__n: x => x,
};
// @endif

View file

@ -61,7 +61,7 @@ ipcRenderer.on('navigate-forward', () => {
// @endif
// @if TARGET='web'
Lbry.setDaemonConnectionString('/api/proxy');
Lbry.setDaemonConnectionString('https://beta.lbry.tv/api/proxy');
// @endif
// We need to override Lbryio for getting/setting the authToken

11
static/index.dev.html Normal file
View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div id="app"></div>
<script type="text/javascript" src="http://localhost:8080/ui.js"></script>
</body>
</html>

View file

@ -2,14 +2,10 @@
<html>
<head>
<meta charset="utf-8" />
<script>
require('source-map-support/source-map-support.js').install();
</script>
</head>
<body>
<div id="app"></div>
<script type="text/javascript" src="ui/bundle.js"></script>
<script type="text/javascript" src="ui.js"></script>
</body>
</html>

View file

@ -67,7 +67,6 @@ const baseConfig = {
__static: `"${path.join(__dirname, 'static').replace(/\\/g, '\\\\')}"`,
}),
],
externals: [nodeExternals()],
};
module.exports = baseConfig;

View file

@ -6,14 +6,13 @@ const CopyWebpackPlugin = require('copy-webpack-plugin');
const STATIC_ROOT = path.resolve(__dirname, 'static/');
const DIST_ROOT = path.resolve(__dirname, 'dist/');
const electronConfig = {
target: 'electron-renderer',
const mainConfig = {
target: 'electron-main',
entry: {
main: './src/platforms/electron/index.js',
ui: './src/ui/index.js',
},
output: {
filename: '[name]/bundle.js',
filename: '[name].js',
path: __dirname + '/dist/electron',
},
module: {
@ -41,7 +40,7 @@ const electronConfig = {
resolve: {
alias: {
// 'src/electron': path.resolve(__dirname, 'src/platforms/electron');
}
},
},
plugins: [
new CopyWebpackPlugin([
@ -56,6 +55,64 @@ const electronConfig = {
},
]),
],
devServer: {
contentBase: path.join(__dirname, 'dist/electron'),
},
};
module.exports = merge(baseConfig, electronConfig);
const renderConfig = {
target: 'electron-renderer',
entry: {
ui: './src/ui/index.js',
},
output: {
filename: '[name].js',
path: __dirname + '/dist/electron',
},
module: {
rules: [
{
test: /\.node$/,
use: 'node-loader',
},
{
test: /\.jsx?$/,
use: [
{
loader: 'preprocess-loader',
options: {
TARGET: 'app',
ppOptions: {
type: 'js',
},
},
},
],
},
],
},
resolve: {
alias: {
// 'src/electron': path.resolve(__dirname, 'src/platforms/electron');
},
},
plugins: [
new CopyWebpackPlugin([
{
from: `${STATIC_ROOT}/`,
to: `${DIST_ROOT}/electron/static/`,
ignore: ['font/**/*', 'index.html', 'index.dev.html'],
},
{
from: `${STATIC_ROOT}/index.html`,
to: `${DIST_ROOT}/electron/index.html`,
},
{
from: `${STATIC_ROOT}/index.dev.html`,
to: `${DIST_ROOT}/electron/index.dev.html`,
},
]),
],
};
module.exports = [merge(baseConfig, mainConfig), merge(baseConfig, renderConfig)];

View file

@ -12,7 +12,7 @@ const webConfig = {
ui: './src/ui/index.js',
},
output: {
filename: 'bundle.js',
filename: '[name].js',
path: __dirname + '/dist/web',
},
module: {

View file

@ -854,11 +854,6 @@
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18"
integrity sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==
"@types/simplemde@^1.11.7":
version "1.11.7"
resolved "https://registry.yarnpkg.com/@types/simplemde/-/simplemde-1.11.7.tgz#c8bd9f54ff46db7f311a989004eb5815acedf429"
integrity sha512-b3yirBar1gqb9clgJJKpx+Or3txkOOkm5sffhRKaBUfh7+1D2Aimx2RKXGS1LK9S5KyNmug3lwpGJtaID9cOnA==
"@types/three@^0.93.1":
version "0.93.22"
resolved "https://registry.yarnpkg.com/@types/three/-/three-0.93.22.tgz#3601929f36d4b3a5b7d3dd9851fec53feda8228c"
@ -2443,14 +2438,14 @@ code-point-at@^1.0.0:
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
codemirror-spell-checker@*:
codemirror-spell-checker@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz#1c660f9089483ccb5113b9ba9ca19c3f4993371e"
integrity sha1-HGYPkIlIPMtRE7m6nKGcP0mTNx4=
dependencies:
typo-js "*"
codemirror@*, codemirror@^5.39.2:
codemirror@^5.39.2, codemirror@^5.41.0:
version "5.44.0"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.44.0.tgz#80dc2a231eeb7aab25ec2405cdca37e693ccf9cc"
integrity sha512-3l42syTNakCdCQuYeZJXTyxina6Y9i4V0ighSJXNCQtRbaCN76smKKLu1ZHPHQon3rnzC7l4i/0r4gp809K1wg==
@ -3535,6 +3530,15 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
easymde@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/easymde/-/easymde-2.5.1.tgz#00144baf96d52debb2043cb0da8c1b7a3d1ad86f"
integrity sha512-8ESZCuareVshPdYcjoY5VnyUHMM/skTQDfmGzl23D+hcgww64DBIVQZWuu9htMGoZZGDVvCU/pYSqa3nZB7bmA==
dependencies:
codemirror "^5.41.0"
codemirror-spell-checker "1.1.2"
marked "^0.5.1"
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@ -4451,16 +4455,16 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fast-levenshtein@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9"
integrity sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=
fast-levenshtein@~2.0.4:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fastparse@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
@ -5346,7 +5350,7 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
hoist-non-react-statics@^3.1.0:
hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==
@ -7004,10 +7008,10 @@ markdown-table@^1.1.0:
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786"
integrity sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==
marked@*:
version "0.6.1"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.6.1.tgz#a63addde477bca9613028de4b2bc3629e53a0562"
integrity sha512-+H0L3ibcWhAZE02SKMqmvYsErLo4EAVJxu5h3bHBBDvvjeWXtl92rGUSBYHL2++5Y+RSNgl8dYOAXcYe7lp1fA==
marked@^0.5.1:
version "0.5.2"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.5.2.tgz#3efdb27b1fd0ecec4f5aba362bddcd18120e5ba9"
integrity sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==
math-expression-evaluator@^1.2.14:
version "1.2.17"
@ -9172,12 +9176,27 @@ react-feather@^1.0.8:
resolved "https://registry.yarnpkg.com/react-feather/-/react-feather-1.1.6.tgz#2a547e3d5cd5e383d3da0128d593cbdb3c1b32f7"
integrity sha512-iCofWhTjX+vQwvDmg7o6vg0XrUg1c41yBDZG+l83nz1FiCsleJoUgd3O+kHpOeWMXuPrRIFfCixvcqyOLGOgIg==
react-hot-loader@^4.7.2:
version "4.7.2"
resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.7.2.tgz#54cd99441c2d594bdc58c90673690c245dcfcaff"
integrity sha512-kkvGHmvLrbg6RH7svQ28T1swM2JFsHYBRT92xz4k4ubSyPcE2i8YVPQmoKWsDk/zNNpC710M9Md10oZzugecOw==
dependencies:
fast-levenshtein "^2.0.6"
global "^4.3.0"
hoist-non-react-statics "^3.3.0"
loader-utils "^1.1.0"
lodash "^4.17.11"
prop-types "^15.6.1"
react-lifecycles-compat "^3.0.4"
shallowequal "^1.0.2"
source-map "^0.7.3"
react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
version "16.8.3"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.3.tgz#4ad8b029c2a718fc0cfc746c8d4e1b7221e5387d"
integrity sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==
react-lifecycles-compat@^3.0.0:
react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
@ -9222,14 +9241,13 @@ react-redux@^5.0.3:
react-is "^16.6.0"
react-lifecycles-compat "^3.0.0"
react-simplemde-editor@^3.6.16:
version "3.6.22"
resolved "https://registry.yarnpkg.com/react-simplemde-editor/-/react-simplemde-editor-3.6.22.tgz#2c122dffbebc304c13aee804d16e3b4533e00345"
integrity sha512-5tyi1fly8h7ISQHIzvApQq3ZB4ManPPnH8t5Dr9l9/uGfO8dqofqfuHPih8EmnCkhBWxUfXufnEWi9Eo7Y2reg==
react-simplemde-editor@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/react-simplemde-editor/-/react-simplemde-editor-4.0.0.tgz#99cb2c8d8da7e6780ac2dd98883a092e3eb0d3b6"
integrity sha512-Z9+8vTFYif9IgDWujNmoLSJTBfLD7JJGAPlLqPsHFr9LTi0irU8dTvEymrKvEEvE2jyd3d4/EBKP548itw/z9A==
dependencies:
"@types/codemirror" "^0.0.65"
"@types/simplemde" "^1.11.7"
simplemde "^1.11.2"
easymde "^2.5.1"
react-templates@0.3.2:
version "0.3.2"
@ -10139,6 +10157,11 @@ shallow-clone@^1.0.0:
kind-of "^5.0.0"
mixin-object "^2.0.1"
shallowequal@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@ -10180,15 +10203,6 @@ simple-get@^2.7.0:
once "^1.3.1"
simple-concat "^1.0.0"
simplemde@^1.11.2:
version "1.11.2"
resolved "https://registry.yarnpkg.com/simplemde/-/simplemde-1.11.2.tgz#a23a35d978d2c40ef07dec008c92f070d8e080e3"
integrity sha1-ojo12XjSxA7wfewAjJLwcNjggOM=
dependencies:
codemirror "*"
codemirror-spell-checker "*"
marked "*"
single-line-log@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
@ -10328,6 +10342,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
space-separated-tokens@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412"
@ -11718,7 +11737,7 @@ webpack-dev-middleware@^1.10.2:
range-parser "^1.0.3"
time-stamp "^2.0.0"
webpack-dev-middleware@^3.5.1:
webpack-dev-middleware@^3.5.1, webpack-dev-middleware@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.0.tgz#71f1b04e52ff8d442757af2be3a658237d53a3e5"
integrity sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg==