diff --git a/app/package.json b/app/package.json index e4a7d62..d42215f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,5 +1,5 @@ { - "name": "timesheets", + "name": "Timesheets", "version": "0.0.1", "description": "A timesheet keeping app based on electron", "main": "main/index.js", diff --git a/app/renderer/assets/html/main.html b/app/renderer/assets/html/main.html index 0b40556..88b7a5c 100644 --- a/app/renderer/assets/html/main.html +++ b/app/renderer/assets/html/main.html @@ -19,7 +19,7 @@ diff --git a/app/renderer/assets/html/menubar.html b/app/renderer/assets/html/menubar.html index 4da642e..98d6809 100644 --- a/app/renderer/assets/html/menubar.html +++ b/app/renderer/assets/html/menubar.html @@ -19,7 +19,7 @@ diff --git a/build/background.png b/build/background.png new file mode 100644 index 0000000..c72c3b3 Binary files /dev/null and b/build/background.png differ diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000..b8e0b06 Binary files /dev/null and b/build/icon.icns differ diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000..3b28564 Binary files /dev/null and b/build/icon.ico differ diff --git a/package.js b/package.js deleted file mode 100644 index a6e0d62..0000000 --- a/package.js +++ /dev/null @@ -1,131 +0,0 @@ -/* eslint strict: 0, no-shadow: 0, no-unused-vars: 0, no-console: 0 */ -'use strict'; - -require('babel-polyfill'); -const os = require('os'); -const webpack = require('webpack'); -const electronCfg = require('./webpack.config.electron.js'); -const cfg = require('./webpack.config.production.js'); -const packager = require('electron-packager'); -const del = require('del'); -const exec = require('child_process').exec; -const argv = require('minimist')(process.argv.slice(2)); -const pkg = require('./package.json'); -const deps = Object.keys(pkg.dependencies); -const devDeps = Object.keys(pkg.devDependencies); - -const appName = argv.name || argv.n || pkg.productName; -const shouldUseAsar = argv.asar || argv.a || false; -const shouldBuildAll = argv.all || false; - - -const DEFAULT_OPTS = { - dir: './', - name: appName, - asar: shouldUseAsar, - ignore: [ - '^/test($|/)', - '^/tools($|/)', - '^/release($|/)', - '^/app/main/index.js', - ].concat(devDeps.map(name => `/node_modules/${name}($|/)`)) - .concat( - deps.filter(name => !electronCfg.externals.includes(name)) - .map(name => `/node_modules/${name}($|/)`) - ), -}; - -const icon = argv.icon || argv.i || 'app/app'; - -if (icon) { - DEFAULT_OPTS.icon = icon; -} - -const version = argv.version || argv.v; - -if (version) { - DEFAULT_OPTS.version = version; - startPack(); -} else { - // use the same version as the currently-installed electron-prebuilt - exec('npm list electron-prebuilt --dev', (err, stdout) => { - if (err) { - DEFAULT_OPTS.version = '1.0.2'; - } else { - DEFAULT_OPTS.version = stdout.split('electron-prebuilt@')[1].replace(/\s/g, ''); - } - - startPack(); - }); -} - - -function build(cfg) { - return new Promise((resolve, reject) => { - webpack(cfg, (err, stats) => { - if (err) return reject(err); - resolve(stats); - }); - }); -} - -function startPack() { - console.log('start pack...'); - build(electronCfg) - .then(() => build(cfg)) - .then(() => del('release')) - .then(paths => { - if (shouldBuildAll) { - // build for all platforms - const archs = ['ia32', 'x64']; - const platforms = ['linux', 'win32', 'darwin']; - - platforms.forEach(plat => { - archs.forEach(arch => { - pack(plat, arch, log(plat, arch)); - }); - }); - } else { - // build for current platform only - pack(os.platform(), os.arch(), log(os.platform(), os.arch())); - } - }) - .catch(err => { - console.error(err); - }); -} - -function pack(plat, arch, cb) { - // there is no darwin ia32 electron - if (plat === 'darwin' && arch === 'ia32') return; - - const iconObj = { - icon: DEFAULT_OPTS.icon + (() => { - let extension = '.png'; - if (plat === 'darwin') { - extension = '.icns'; - } else if (plat === 'win32') { - extension = '.ico'; - } - return extension; - })(), - }; - - const opts = Object.assign({}, DEFAULT_OPTS, iconObj, { - platform: plat, - arch, - prune: true, - 'app-version': pkg.version || DEFAULT_OPTS.version, - out: `release/${plat}-${arch}`, - }); - - packager(opts, cb); -} - - -function log(plat, arch) { - return (err, filepath) => { - if (err) return console.error(err); - console.log(`${plat}-${arch} finished!`); - }; -} diff --git a/package.json b/package.json index 8a45c36..d3e577d 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,28 @@ { - "name": "timesheets", + "name": "Timesheets", "productName": "Timesheets", - "version": "0.10.0", + "version": "0.0.1", "description": "A timesheet keeping app based on electron", - "main": "dist/main/main.js", + "main": "dist/main/index.js", "scripts": { "test": "cross-env NODE_ENV=test mocha --compilers js:babel-register --recursive --require ./test/setup.js test/**/*.spec.js", "test-watch": "npm test -- --watch", "test-e2e": "cross-env NODE_ENV=test mocha --compilers js:babel-register --require ./test/setup.js --require co-mocha ./test/e2e.js", "lint": "eslint app test *.js", "hot-server": "node -r babel-register server.js", - "build-main": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config webpack.config.electron.js --progress --profile --colors", + "build-main": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config webpack.config.electron.js --progress --profile --colors && cp app/package.json dist/", "build-renderer": "cross-env NODE_ENV=production node -r babel-register ./node_modules/webpack/bin/webpack --config webpack.config.production.js --progress --profile --colors && cp -R app/renderer/assets dist/renderer", "build": "npm run build-main && npm run build-renderer", "start": "cross-env NODE_ENV=production electron ./", "start-hot": "cross-env HOT=1 NODE_ENV=development electron -r babel-register -r babel-polyfill ./app/main/index", "package": "cross-env NODE_ENV=production node -r babel-register package.js", "package-all": "npm run package -- --all", - "postinstall": "cd app/ && npm install", "dev": "concurrently --kill-others \"npm run hot-server\" \"npm run start-hot\"", "webfont:roboto": "webfont-dl \"https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&lang=en\" -o app/renderer/assets/css/fonts/roboto.global.css --woff1=data --svg=omit --ttf=omit --eot=omit", - "webfont:material-icons": "webfont-dl \"https://fonts.googleapis.com/icon?family=Material+Icons\" -o app/renderer/assets/css/fonts/material-icons.global.css --woff1=data --svg=omit --ttf=omit --eot=omit" + "webfont:material-icons": "webfont-dl \"https://fonts.googleapis.com/icon?family=Material+Icons\" -o app/renderer/assets/css/fonts/material-icons.global.css --woff1=data --svg=omit --ttf=omit --eot=omit", + "postinstall": "install-app-deps", + "pack": "build", + "dist": "build" }, "bin": { "electron": "./node_modules/.bin/electron" @@ -61,7 +63,7 @@ "cross-env": "^1.0.7", "css-loader": "^0.23.1", "del": "^2.2.0", - "electron-packager": "^6.0.2", + "electron-builder": "^3.25.0", "electron-prebuilt": "^1.0.2", "electron-rebuild": "^1.1.3", "eslint": "^2.9.0", @@ -80,12 +82,12 @@ "react-addons-test-utils": "^15.0.1", "selenium-webdriver": "^2.53.1", "sinon": "^1.17.3", + "source-map-support": "^0.4.0", "style-loader": "^0.13.1", "webfont-dl": "^0.1.2", "webpack": "^1.13.0", "webpack-dev-middleware": "^1.6.1", - "webpack-hot-middleware": "^2.10.0", - "source-map-support": "^0.4.0" + "webpack-hot-middleware": "^2.10.0" }, "devEngines": { "node": "4.x || 5.x || 6.x", @@ -93,5 +95,16 @@ }, "contributors": [ "Jack Wilkinson (https://github.com/guacjack)" - ] + ], + "build": { + "app-bundle-id": "hardchor.timesheets", + "app-category-type": "public.app-category.productivity", + "productName": "Timesheets", + "compression": "normal", + "asar": true + }, + "directories": { + "app": "./dist/", + "output": "./release/" + } } diff --git a/webpack.config.base.js b/webpack.config.base.js index 07d1e28..7a1409b 100644 --- a/webpack.config.base.js +++ b/webpack.config.base.js @@ -13,7 +13,7 @@ export default { }, output: { path: path.join(__dirname, 'dist'), - filename: '[name].js', + filename: '[name]/index.js', libraryTarget: 'commonjs2', }, resolve: { diff --git a/webpack.config.electron.js b/webpack.config.electron.js index f722001..9d719c3 100644 --- a/webpack.config.electron.js +++ b/webpack.config.electron.js @@ -14,7 +14,7 @@ export default { output: { path: path.resolve(__dirname, 'dist/main'), - filename: 'main.js', + filename: 'index.js', }, plugins: [ diff --git a/webpack.config.production.js b/webpack.config.production.js index 505d22b..4eddf36 100644 --- a/webpack.config.production.js +++ b/webpack.config.production.js @@ -22,7 +22,7 @@ const config = { path: path.join(__dirname, 'dist', 'renderer'), publicPath: '../dist/', - filename: '[name]/[name].js', + filename: '[name]/index.js', }, module: {