115 lines
3.3 KiB
JavaScript
115 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
var pathUtil = require('path');
|
|
var Q = require('q');
|
|
var gulp = require('gulp');
|
|
var rollup = require('rollup');
|
|
var jetpack = require('fs-jetpack');
|
|
var utils = require('./utils');
|
|
var minimist = require('minimist');
|
|
var projectDir = jetpack;
|
|
var srcDir = projectDir.cwd('./app');
|
|
var destDir = projectDir.cwd('./build');
|
|
|
|
var knownOptions = {
|
|
string: 'clean'
|
|
};
|
|
|
|
var options = minimist(process.argv.slice(2), knownOptions);
|
|
|
|
var clean = options.clean!=='false';
|
|
|
|
var paths = {
|
|
copyFromAppDir: [
|
|
'./node_modules/**',
|
|
'./vendor/**',
|
|
'./**/*.html',
|
|
'./**/*.css',
|
|
'./**/*.+(jpg|png|svg)'
|
|
]
|
|
};
|
|
console.error('-clean ' + clean + ' ' + destDir.path());
|
|
// -------------------------------------
|
|
// Tasks
|
|
// -------------------------------------
|
|
gulp.task('clean', function (callback) {
|
|
if(!clean){
|
|
var deferred = Q.defer();
|
|
deferred.resolve(true);
|
|
return deferred.promise;
|
|
}
|
|
return destDir.dirAsync('.', {
|
|
empty: clean
|
|
});
|
|
});
|
|
|
|
var copyTask = function () {
|
|
return projectDir.copyAsync('app', destDir.path(), {
|
|
overwrite: true,
|
|
matching:paths.copyFromAppDir
|
|
});
|
|
};
|
|
|
|
gulp.task('copy', ['clean'], copyTask);
|
|
var bundle = function (src, dest) {
|
|
var deferred = Q.defer();
|
|
rollup.rollup({
|
|
entry: src
|
|
}).then(function (bundle) {
|
|
var jsFile = pathUtil.basename(dest);
|
|
var result = bundle.generate({
|
|
format: 'cjs',
|
|
sourceMap: false,
|
|
sourceMapFile: jsFile
|
|
});
|
|
// Wrap code in self invoking function so the variables don't
|
|
// pollute the global namespace.
|
|
var isolatedCode = '(function () {' + result.code + '\n}());';
|
|
return Q.all([
|
|
destDir.writeAsync(dest, isolatedCode + '\n//# sourceMappingURL=' + jsFile + '.map')
|
|
]);
|
|
}).then(function () {
|
|
deferred.resolve();
|
|
}).catch(function (err) {
|
|
console.error('Build: Error during rollup', err.stack);
|
|
});
|
|
|
|
return deferred.promise;
|
|
};
|
|
var bundleApplication = function () {
|
|
return Q.all([
|
|
bundle(srcDir.path('background.js'), destDir.path('background.js'))
|
|
//bundle(srcDir.path('app.js'), destDir.path('app.js'))
|
|
]);
|
|
};
|
|
|
|
var bundleTask = function () {
|
|
return bundleApplication();
|
|
};
|
|
gulp.task('bundle', ['clean'], bundleTask);
|
|
gulp.task('finalize', ['clean'], function () {
|
|
|
|
var manifest = srcDir.read('package.json', 'json');
|
|
// Add "dev" or "test" suffix to name, so Electron will write all data
|
|
// like cookies and localStorage in separate places for each environment.
|
|
switch (utils.getEnvName()) {
|
|
case 'development':
|
|
manifest.name += '-dev';
|
|
manifest.productName += ' Dev';
|
|
break;
|
|
case 'test':
|
|
manifest.name += '-test';
|
|
manifest.productName += ' Test';
|
|
break;
|
|
}
|
|
destDir.write('package.json', manifest);
|
|
|
|
// Copy environment variables to package.json file for easy use
|
|
// in the running application. This is not official way of doing
|
|
// things, but also isn't prohibited ;)
|
|
manifest.env = projectDir.read('config/env_' + utils.getEnvName() + '.json', 'json');
|
|
|
|
destDir.write('package.json', manifest);
|
|
});
|
|
gulp.task('build', ['bundle','copy','finalize']);
|