Skip to content

Commit

Permalink
Merge pull request #20 from jden/windows-support
Browse files Browse the repository at this point in the history
add windows support - #3
  • Loading branch information
Max Ogden committed May 10, 2015
2 parents 7adc5b0 + 00440bc commit 8d23709
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 2 deletions.
4 changes: 2 additions & 2 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ if (!args.dir || !args.name) {
console.error('Usage: electron-packager <sourcedir> <Appname>')
process.exit(1)
}

console.log('args', args)
packager(args, function done (err, appPath) {
if (err) {
console.error(err)
console.error(err.stack)
process.exit(1)
}

Expand Down
1 change: 1 addition & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ module.exports = function packager (opts, cb) {
switch (os.platform()) {
case 'darwin': platform = require('./mac'); break
case 'linux': platform = require('./linux'); break
case 'win32': platform = require('./windows'); break
default: cb(new Error('Unsupported platform'))
}

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
"asar": "^0.6.1",
"minimist": "^1.1.1",
"mkdirp": "^0.5.0",
"mv": "^2.0.3",
"ncp": "^2.0.0",
"plist": "^1.1.0",
"rcedit": "^0.3.0",
"rimraf": "^2.3.2"
},
"devDependencies": {
Expand Down
125 changes: 125 additions & 0 deletions windows.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
var os = require('os')
var path = require('path')
var child = require('child_process')

var mkdirp = require('mkdirp')
var rimraf = require('rimraf')
var ncp = require('ncp').ncp
var asar = require('asar')
var mv = require('mv')
var rcedit = require('rcedit')

module.exports = {
createApp: function createApp (opts, cb, electronPath) {
var electronApp = path.join(electronPath, 'dist')
var tmpDir = path.join(os.tmpdir(), 'electron-packager-windows')

var newApp = path.join(tmpDir, opts.name + '.app')
console.log('newApp', newApp)
// reset build folders + copy template app
rimraf(tmpDir, function rmrfd () {
// ignore errors
mkdirp(newApp, function mkdirpd () {
// ignore errors
// copy .app folder and use as template (this is exactly what Atom editor does)
ncp(electronApp, newApp, function copied (err) {
if (err) return cb(err)
// rename electron.exe
mv(path.join(newApp, 'electron.exe'), path.join(newApp, opts.name + '.exe'), function (err) {
if (err) return cb(err)

buildWinApp(opts, cb, newApp)
})
})
})
})
}
}

function copy (from, to, cb) {
rimraf(to, function () {
mkdirp(to, function () {
ncp(from, to, function (err) {
if (err) { return cb(err) }
cb()
})
})
})
}

function buildWinApp (opts, cb, newApp) {
var paths = {
app: path.join(newApp, 'resources', 'app')
}

function filter (file) {
var ignore = opts.ignore || []
if (!Array.isArray(ignore)) ignore = [ignore]
for (var i = 0; i < ignore.length; i++) {
if (file.match(ignore[i])) {
return false
}
}
return true
}

// copy users app into .app
ncp(opts.dir, paths.app, {filter: filter}, function copied (err) {
if (err) return cb(err)

if (opts.prune) {
prune(function pruned (err) {
if (err) return cb(err)
moveApp()
})
} else {
moveApp()
}

function prune (cb) {
child.exec('npm prune --production', { cwd: paths.app }, cb)
}

function moveApp () {
// finally, move app into cwd
var finalPath = path.join(opts.out || process.cwd(), opts.name + '.app')
console.log('finalPath', finalPath)
copy(newApp, finalPath, function moved (err) {
if (err) return cb(err)
if (opts.asar) {
asarApp(function (err) {
if (err) return cb(err)
updateIcon()
})
} else {
updateIcon()
}
})
}

function updateIcon () {
var finalPath = path.join(opts.out || process.cwd(), opts.name + '.app')

if (!opts.icon) {
return cb(null, finalPath)
}

var exePath = path.join(opts.out || process.cwd(), opts.name + '.app', opts.name + '.exe')

rcedit(exePath, {icon: opts.icon}, function (err) {
cb(err, finalPath)
})

}

function asarApp (cb) {
var finalPath = path.join(opts.out || process.cwd(), opts.name + '.app', 'resources')
var src = path.join(finalPath, 'app')
var dest = path.join(finalPath, 'app.asar')
asar.createPackage(src, dest, function (err) {
if (err) return cb(err)
rimraf(src, cb)
})
}
})
}

0 comments on commit 8d23709

Please sign in to comment.