Skip to content

Commit 88b33fe

Browse files
author
Jordan Schroter
committed
restructuring, scripts for packaging releases
1 parent 3ef0671 commit 88b33fe

File tree

14 files changed

+97
-43
lines changed

14 files changed

+97
-43
lines changed

.eslintignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
node_modules
22
build
3+
cache
34
lib
45
dist
56
webpack.*.js
67
server.js
78
build.js
9+
init.js

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ node_modules
33
dist
44
lib
55
build
6+
cache
67
.DS_Store
78
*.log
89
build.js

README.md

-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,4 @@ Boilerplate app for Electron with Redux
44
- electron-compile for ES6/ES7 via babel
55
- BrowserSync for livereload
66
- Structure for redux/react app
7-
8-
**TODO**
97
- scripts for building cross-platform releases
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

app/client/main.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import { compose, createStore, combineReducers } from 'redux';
4+
import { devTools } from 'redux-devtools';
5+
import { Provider } from 'react-redux';
6+
import user from './reducers/user';
7+
import App from './containers/App';
8+
9+
const isDevelopment = process.env.NODE_ENV === 'development';
10+
const appCreateStore = isDevelopment ? compose(devTools())(createStore) : createStore;
11+
const store = appCreateStore(combineReducers({ user }));
12+
const rootElement = document.querySelector(document.currentScript.getAttribute('data-container'));
13+
14+
ReactDOM.render(
15+
<div>
16+
<Provider store={store}>
17+
<App />
18+
</Provider>
19+
{ isDevelopment && do {
20+
const { DevTools, DebugPanel, LogMonitor } = require('redux-devtools/lib/react');
21+
<DebugPanel top right bottom>
22+
<DevTools store={store} monitor={LogMonitor} />
23+
</DebugPanel>;
24+
} }
25+
</div>,
26+
rootElement
27+
);

client/reducers/user.js app/client/reducers/user.js

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { handleActions } from 'redux-actions';
22

33
export default handleActions({
44
USER_LOGIN: (state, action) => {
5-
console.log(state, action);
65
return { ...state, ...action.payload };
76
}
87
}, {});

main.js app/main.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ app.on('ready', () => {
1818
mainWindow = new BrowserWindow({ width: 1200, height: 1000 });
1919

2020
mainWindow.loadUrl(`file://${__dirname}/client/index.html`);
21-
mainWindow.openDevTools();
21+
22+
if (process.env.NODE_ENV === 'development') {
23+
mainWindow.openDevTools();
24+
}
2225

2326
mainWindow.on('closed', () => {
2427
mainWindow = null;

client/main.js

-31
This file was deleted.

init.js

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1-
// TODO: precompile in prod, remove init?
2-
require('electron-compile').init();
3-
require('./main');
1+
var path = require('path');
2+
var cacheDir = path.join(__dirname, 'cache');
3+
4+
if (process.env.NODE_ENV === 'development') {
5+
require('electron-compile').initWithOptions({
6+
cacheDir: cacheDir,
7+
js: {
8+
stage: 2
9+
}
10+
});
11+
} else {
12+
require('electron-compile').initForProduction(cacheDir);
13+
}
14+
require('./app/main');
15+

package.json

+7-5
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@
1111
"react-dom": "^0.14.0-rc1",
1212
"react-redux": "^2.1.2",
1313
"redux": "^3.0.0",
14-
"redux-actions": "^0.8.0"
14+
"redux-actions": "^0.8.0",
15+
"electron-compile": "^0.9.2",
16+
"redux-devtools": "^2.1.2"
1517
},
1618
"devDependencies": {
1719
"babel": "^5.8.23",
1820
"babel-eslint": "^4.1.1",
1921
"browser-sync": "^2.9.3",
20-
"electron-compile": "^0.9.2",
22+
"electron-packager": "^5.1.0",
2123
"electron-prebuilt": "^0.32.2",
2224
"eslint": "^1.4.1",
2325
"eslint-config-airbnb": "0.0.8",
24-
"eslint-plugin-react": "^3.3.2",
25-
"redux-devtools": "^2.1.2"
26+
"eslint-plugin-react": "^3.3.2"
2627
},
2728
"scripts": {
28-
"start": "node node_modules/babel/bin/babel-node.js scripts/serve.js"
29+
"serve": "node node_modules/babel/bin/babel-node.js scripts/serve.js",
30+
"pack": "node node_modules/babel/bin/babel-node.js scripts/pack.js"
2931
}
3032
}

scripts/pack.js

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import packager from 'electron-packager';
4+
// elctron-compile api not setup for es6 modules, need to use require;
5+
const compiler = require('electron-compile');
6+
7+
const paths = {
8+
packageJson: path.join(__dirname, '../package.json'),
9+
cache: path.join(__dirname, '../cache')
10+
};
11+
12+
const packageJson = JSON.parse(fs.readFileSync(paths.packageJson, 'utf8'));
13+
const nodeModuleIgnores = [
14+
'electron-compile/node_modules/electron-compilers',
15+
// devDependencies are ignored by default but explicity ignoring them
16+
// seems to speed up packaging
17+
...Object.keys(packageJson.devDependencies),
18+
];
19+
20+
compiler.init(paths.cache);
21+
compiler.compileAll('app');
22+
fs.writeFileSync(
23+
path.join(paths.cache, 'settings.json'),
24+
JSON.stringify(compiler.collectCompilerInformation())
25+
);
26+
27+
packager({
28+
dir: '.',
29+
name: packageJson.name,
30+
platform: 'darwin',
31+
arch: 'x64',
32+
version: '0.32.2',
33+
overwrite: true,
34+
prune: true,
35+
ignore: new RegExp(`node_modules/(${nodeModuleIgnores.join('|')})`),
36+
// asar: true,
37+
out: 'dist'
38+
}, (err, appPath) => {
39+
if (err) return console.error(err);
40+
console.log(appPath);
41+
});

0 commit comments

Comments
 (0)