diff --git a/.jshintrc b/.jshintrc index 2bf4108e..ba0626ff 100644 --- a/.jshintrc +++ b/.jshintrc @@ -9,7 +9,6 @@ "noempty": true, "nonbsp": true, "nonew": true, - "quotmark": "single", "undef": true, "unused": true, "trailing": true, diff --git a/Gruntfile.js b/Gruntfile.js index 5f3e4475..e3642e46 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -17,7 +17,7 @@ module.exports = function (grunt) { } }, - nggettext_extract: { + 'nggettext_extract': { pot: { files: { 'res/lang/po/template.pot': ['tmp/html/all.html', 'res/app/**/*.js'] @@ -25,7 +25,7 @@ module.exports = function (grunt) { } }, - nggettext_compile: { + 'nggettext_compile': { all: { files: { 'res/lang/translations.js': ['res/lang/po/*.po'] @@ -34,6 +34,10 @@ module.exports = function (grunt) { } }) - grunt.registerTask('translate', ['jade:translate', 'nggettext_extract', 'nggettext_compile']) + grunt.registerTask('translate', [ + 'jade:translate' + , 'nggettext_extract' + , 'nggettext_compile' + ]) grunt.registerTask('default', ['translate']) } diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 00000000..6e0c6460 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,10 @@ +var gulp = require('gulp') +var jshint = require('gulp-jshint') + +gulp.task('lint', function() { + gulp.src(['lib/**/*.js', '*.js']) + .pipe(jshint()) + .pipe(jshint.reporter('jshint-stylish')) +}) + +gulp.task('test', ['lint']) diff --git a/lib/cli.js b/lib/cli.js index c730dedc..ce3748c1 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -520,13 +520,13 @@ program , '--auth-url', util.format('http://localhost:%d/', options.authPort) , '--connect-sub', options.bindAppPub , '--connect-push', options.bindAppPull - ].concat(function() { + ].concat((function() { var extra = [] if (options.disableWatch) { extra.push('--disable-watch') } return extra - }())) + })())) ] function shutdown() { diff --git a/lib/db/api.js b/lib/db/api.js index 10d2518b..5e47343b 100644 --- a/lib/db/api.js +++ b/lib/db/api.js @@ -1,8 +1,6 @@ var r = require('rethinkdb') -var Promise = require('bluebird') var db = require('./') -var wire = require('../wire') var wireutil = require('../wire/util') var dbapi = Object.create(null) @@ -85,7 +83,7 @@ dbapi.setDeviceOwner = function(serial, owner) { })) } -dbapi.unsetDeviceOwner = function(serial, owner) { +dbapi.unsetDeviceOwner = function(serial) { return db.run(r.table('devices').get(serial).update({ owner: null })) diff --git a/lib/db/index.js b/lib/db/index.js index 4b01ae6c..a2889a8b 100644 --- a/lib/db/index.js +++ b/lib/db/index.js @@ -43,6 +43,6 @@ db.close = function() { // Small utility for running queries without having to acquire a connection db.run = function(q, options) { return db.connect().then(function(conn) { - return rutil.run(conn, q) + return rutil.run(conn, q, options) }) } diff --git a/lib/db/setup.js b/lib/db/setup.js index bc353f0a..07962fe5 100644 --- a/lib/db/setup.js +++ b/lib/db/setup.js @@ -1,6 +1,3 @@ -var assert = require('assert') -var util = require('util') - var r = require('rethinkdb') var Promise = require('bluebird') @@ -24,7 +21,7 @@ module.exports = function(conn) { .then(function() { log.info('Database "%s" created', conn.db) }) - .catch(alreadyExistsError, function(err) { + .catch(alreadyExistsError, function() { log.info('Database "%s" already exists', conn.db) return Promise.resolve() }) @@ -38,11 +35,11 @@ module.exports = function(conn) { .then(function() { log.info('Table "%s" created', table) }) - .catch(alreadyExistsError, function(err) { + .catch(alreadyExistsError, function() { log.info('Table "%s" already exists', table) return Promise.resolve() }) - .catch(noMasterAvailableError, function(err) { + .catch(noMasterAvailableError, function() { return Promise.delay(1000).then(function() { return createTable(table, options) }) @@ -61,11 +58,11 @@ module.exports = function(conn) { .then(function() { log.info('Index "%s"."%s" created', table, index) }) - .catch(alreadyExistsError, function(err) { + .catch(alreadyExistsError, function() { log.info('Index "%s"."%s" already exists', table, index) return Promise.resolve() }) - .catch(noMasterAvailableError, function(err) { + .catch(noMasterAvailableError, function() { return Promise.delay(1000).then(function() { return createIndex(table, index, fn) }) diff --git a/lib/db/tables.js b/lib/db/tables.js index bf046061..cb967f32 100644 --- a/lib/db/tables.js +++ b/lib/db/tables.js @@ -1,5 +1,3 @@ -var r = require('rethinkdb') - module.exports = { users: { primaryKey: 'email' diff --git a/lib/roles/app.js b/lib/roles/app.js index 82957450..925938d4 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -1,4 +1,3 @@ -var url = require('url') var http = require('http') var events = require('events') var path = require('path') @@ -41,7 +40,8 @@ module.exports = function(options) { app.use(cors()) - app.use('/static/bower_components', express.static(pathutil.resource('bower_components'))) + app.use('/static/bower_components', + express.static(pathutil.resource('bower_components'))) app.use('/static/data', express.static(pathutil.resource('data'))) app.use('/static/devices', datautil.middleware()) app.use('/static', express.static(pathutil.resource('app'))) @@ -203,7 +203,7 @@ module.exports = function(options) { accept(null, false) } }) - .catch(function(err) { + .catch(function() { accept(null, false) }) } @@ -225,11 +225,11 @@ module.exports = function(options) { sub.unsubscribe(channel) } - function createTouchHandler(klass) { + function createTouchHandler(Klass) { return function(channel, data) { push.send([ channel - , wireutil.envelope(new klass( + , wireutil.envelope(new Klass( data.x , data.y )) @@ -237,11 +237,11 @@ module.exports = function(options) { } } - function createKeyHandler(klass) { + function createKeyHandler(Klass) { return function(channel, data) { push.send([ channel - , wireutil.envelope(new klass( + , wireutil.envelope(new Klass( data.key )) ]) @@ -309,7 +309,7 @@ module.exports = function(options) { // User's private group joinChannel(user.group) - new Promise(function(resolve, reject) { + new Promise(function(resolve) { socket.on('disconnect', resolve) // Touch events .on('input.touchDown', createTouchHandler(wire.TouchDownMessage)) diff --git a/lib/roles/auth/ldap.js b/lib/roles/auth/ldap.js index 531ca0a0..9c0bca31 100644 --- a/lib/roles/auth/ldap.js +++ b/lib/roles/auth/ldap.js @@ -1,5 +1,3 @@ -var url = require('url') - var express = require('express') var validator = require('express-validator') @@ -28,7 +26,8 @@ module.exports = function(options) { app.use(express.urlencoded()) app.use(express.csrf()) app.use(validator()) - app.use('/static/bower_components', express.static(pathutil.resource('bower_components'))) + app.use('/static/bower_components', + express.static(pathutil.resource('bower_components'))) app.use('/static/data', express.static(pathutil.resource('data'))) app.use('/static', express.static(pathutil.resource('auth-ldap'))) diff --git a/lib/roles/auth/mock.js b/lib/roles/auth/mock.js index aae18287..9ebca88e 100644 --- a/lib/roles/auth/mock.js +++ b/lib/roles/auth/mock.js @@ -1,5 +1,3 @@ -var url = require('url') - var express = require('express') var validator = require('express-validator') @@ -27,7 +25,8 @@ module.exports = function(options) { app.use(express.urlencoded()) app.use(express.csrf()) app.use(validator()) - app.use('/static/bower_components', express.static(pathutil.resource('bower_components'))) + app.use('/static/bower_components', + express.static(pathutil.resource('bower_components'))) app.use('/static/data', express.static(pathutil.resource('data'))) app.use('/static', express.static(pathutil.resource('auth-mock'))) diff --git a/lib/roles/device/plugins/input.js b/lib/roles/device/plugins/input.js index 8e42ed1d..4ce493a8 100644 --- a/lib/roles/device/plugins/input.js +++ b/lib/roles/device/plugins/input.js @@ -40,8 +40,8 @@ module.exports = syrup.serial() }) .then(function() { return adb.shell(options.serial, util.format( - "export CLASSPATH='%s';" - + " exec app_process /system/bin '%s'" + "export CLASSPATH='%s';" + + " exec app_process /system/bin '%s'" , apk.path , apk.main )) @@ -199,7 +199,7 @@ module.exports = syrup.serial() .then(openService) .then(function() { router - .on(wire.PhysicalIdentifyMessage, function(channel, message) { + .on(wire.PhysicalIdentifyMessage, function(channel) { identity() push.send([ channel diff --git a/lib/roles/device/plugins/logcat.js b/lib/roles/device/plugins/logcat.js index d9512ea7..da5813a9 100644 --- a/lib/roles/device/plugins/logcat.js +++ b/lib/roles/device/plugins/logcat.js @@ -9,7 +9,8 @@ module.exports = syrup.serial() .dependency(require('../support/router')) .dependency(require('../support/push')) .dependency(require('../support/quit')) - .define(function(options, adb, router, push, quit) { + .dependency(require('./owner')) + .define(function(options, adb, router, push, quit, owner) { var log = logger.createLogger('device:plugins:logcat') function openService() { diff --git a/lib/roles/device/plugins/owner.js b/lib/roles/device/plugins/owner.js index e0cf05b3..685f56bd 100644 --- a/lib/roles/device/plugins/owner.js +++ b/lib/roles/device/plugins/owner.js @@ -14,7 +14,8 @@ module.exports = syrup.serial() .dependency(require('../support/sub')) .dependency(require('../support/channels')) .dependency(require('../support/quit')) - .define(function(options, identity, input, router, push, sub, channels, quit) { + .define(function(options, identity, input, router, push, sub, channels, + quit) { var log = logger.createLogger('device:plugins:owner') var owner = null diff --git a/lib/roles/device/plugins/shell.js b/lib/roles/device/plugins/shell.js index 0467e190..2cabf7ae 100644 --- a/lib/roles/device/plugins/shell.js +++ b/lib/roles/device/plugins/shell.js @@ -30,7 +30,7 @@ module.exports = syrup.serial() function readableListener() { var chunk - while (chunk = stream.read()) { + while ((chunk = stream.read())) { push.send([ channel , wireutil.envelope(new wire.TransactionProgressMessage( diff --git a/lib/roles/device/plugins/solo.js b/lib/roles/device/plugins/solo.js index 3c2c8d28..67332984 100644 --- a/lib/roles/device/plugins/solo.js +++ b/lib/roles/device/plugins/solo.js @@ -18,7 +18,7 @@ module.exports = syrup.serial() sub.subscribe(channel) channels.register(channel, Infinity) - router.on(wire.ProbeMessage, function(channel, message) { + router.on(wire.ProbeMessage, function() { push.send([ wireutil.global , wireutil.envelope(new wire.DeviceIdentityMessage( diff --git a/lib/roles/device/plugins/stats.js b/lib/roles/device/plugins/stats.js index caa6a4ea..e677ce1a 100644 --- a/lib/roles/device/plugins/stats.js +++ b/lib/roles/device/plugins/stats.js @@ -17,7 +17,7 @@ module.exports = syrup.serial() function openService() { return devutil.ensureUnusedPort(adb, options.serial, service.port) - .then(function(port) { + .then(function() { return adb.shell(options.serial, [ remote.bin , '--lib', remote.lib diff --git a/lib/roles/device/resources/inputagent.js b/lib/roles/device/resources/inputagent.js index 957907f0..8588ef2b 100644 --- a/lib/roles/device/resources/inputagent.js +++ b/lib/roles/device/resources/inputagent.js @@ -39,8 +39,8 @@ module.exports = syrup.serial() .then(function(installedPath) { log.info('Running version check') return adb.shell(options.serial, util.format( - "export CLASSPATH='%s';" - + " exec app_process /system/bin '%s' --version" + "export CLASSPATH='%s';" + + " exec app_process /system/bin '%s' --version" , installedPath , resource.main )) @@ -61,7 +61,7 @@ module.exports = syrup.serial() }) }) }) - .catch(function(err) { + .catch(function() { log.info('Installing InputAgent.apk') return adb.install(options.serial, resource.apk) .then(function() { diff --git a/lib/roles/device/resources/remote.js b/lib/roles/device/resources/remote.js index 0deae3fb..93f1092d 100644 --- a/lib/roles/device/resources/remote.js +++ b/lib/roles/device/resources/remote.js @@ -58,7 +58,7 @@ module.exports = syrup.serial() .then(function(out) { // Can be "Text is busy", "text busy" return streamutil.findLine(out, (/busy/i)) - .then(function(line) { + .then(function() { log.info('Binary is busy, will retry') return Promise.delay(1000) }) diff --git a/lib/roles/device/support/channels.js b/lib/roles/device/support/channels.js index 3c283ea3..2470de5a 100644 --- a/lib/roles/device/support/channels.js +++ b/lib/roles/device/support/channels.js @@ -4,7 +4,7 @@ var logger = require('../../../util/logger') var ChannelManager = require('../../../wire/channelmanager') module.exports = syrup.serial() - .define(function(options, router) { + .define(function() { var log = logger.createLogger('device:support:channels') var channels = new ChannelManager() channels.on('timeout', function(channel) { diff --git a/lib/roles/device/support/properties.js b/lib/roles/device/support/properties.js index 54bbb240..c508c8e5 100644 --- a/lib/roles/device/support/properties.js +++ b/lib/roles/device/support/properties.js @@ -1,6 +1,5 @@ var syrup = require('syrup') -var devutil = require('../../../util/devutil') var logger = require('../../../util/logger') module.exports = syrup.serial() diff --git a/lib/roles/device/support/quit.js b/lib/roles/device/support/quit.js index 61da55e8..bb7ad4d2 100644 --- a/lib/roles/device/support/quit.js +++ b/lib/roles/device/support/quit.js @@ -4,7 +4,7 @@ var syrup = require('syrup') var logger = require('../../../util/logger') module.exports = syrup.serial() - .define(function(options) { + .define(function() { var log = logger.createLogger('device:support:quit') var cleanup = [] diff --git a/lib/roles/device/support/router.js b/lib/roles/device/support/router.js index 2aeaf7d5..2557e35b 100644 --- a/lib/roles/device/support/router.js +++ b/lib/roles/device/support/router.js @@ -1,13 +1,11 @@ var syrup = require('syrup') -var logger = require('../../../util/logger') var wirerouter = require('../../../wire/router') module.exports = syrup.serial() .dependency(require('./sub')) .dependency(require('./channels')) .define(function(options, sub, channels) { - var log = logger.createLogger('device:support:router') var router = wirerouter() sub.on('message', router.handler()) diff --git a/lib/roles/notify/hipchat.js b/lib/roles/notify/hipchat.js index 5556fa5c..7a13c43e 100644 --- a/lib/roles/notify/hipchat.js +++ b/lib/roles/notify/hipchat.js @@ -56,7 +56,7 @@ module.exports = function(options) { message: messages.join('
') , color: 'purple' , notify: true - , message_format: 'html' + , 'message_format': 'html' , token: options.token }) } diff --git a/lib/roles/provider.js b/lib/roles/provider.js index 12e5b046..55591833 100644 --- a/lib/roles/provider.js +++ b/lib/roles/provider.js @@ -1,4 +1,3 @@ -var path = require('path') var events = require('events') var adb = require('adbkit') @@ -109,7 +108,7 @@ module.exports = function(options) { , worker // Wait for others to acknowledge the device - var register = new Promise(function(resolve, reject) { + var register = new Promise(function(resolve) { // Tell others we found a device push.send([ wireutil.global @@ -175,7 +174,7 @@ module.exports = function(options) { } // When the added device gets removed - function removeListener(updatedDevice) { + function removeListener() { register.then(function() { log.info('Lost device "%s" (%s)', device.id, device.type) @@ -224,7 +223,7 @@ module.exports = function(options) { // Starts a device worker and keeps it alive function work() { - return worker = workers[device.id] = spawn() + return (worker = workers[device.id] = spawn()) .then(function() { log.info('Device worker "%s" has retired', device.id) delete workers[device.id] @@ -323,7 +322,7 @@ module.exports = function(options) { _.pull(lists.waiting, device.id) }) .cancellable() - .catch(Promise.CancellationError, function(err) { + .catch(Promise.CancellationError, function() { log.info('Gracefully killing device worker "%s"', device.id) return procutil.gracefullyKill(proc, options.killTimeout) }) @@ -377,12 +376,12 @@ module.exports = function(options) { }) } - process.on('SIGINT', function(e) { + process.on('SIGINT', function() { log.info('Received SIGINT') gracefullyExit() }) - process.on('SIGTERM', function(e) { + process.on('SIGTERM', function() { log.info('Received SIGTERM') gracefullyExit() }) diff --git a/lib/roles/reaper.js b/lib/roles/reaper.js index 1f0acf25..d13752e9 100644 --- a/lib/roles/reaper.js +++ b/lib/roles/reaper.js @@ -1,5 +1,3 @@ -var util = require('util') - var Promise = require('bluebird') var zmq = require('zmq') diff --git a/lib/util/devutil.js b/lib/util/devutil.js index cb1042d8..83ce522b 100644 --- a/lib/util/devutil.js +++ b/lib/util/devutil.js @@ -51,7 +51,7 @@ devutil.ensureUnusedPort = function(adb, serial, port) { conn.end() throw new Error(util.format('Port "%d" should be unused', port)) }) - .catch(closedError, function(err) { + .catch(closedError, function() { return Promise.resolve(port) }) } @@ -62,7 +62,7 @@ devutil.waitForPort = function(adb, serial, port) { conn.port = port return conn }) - .catch(closedError, function(err) { + .catch(closedError, function() { return Promise.delay(100) .then(function() { return devutil.waitForPort(adb, serial, port) @@ -93,7 +93,7 @@ devutil.waitForPortToFree = function(adb, serial, port) { conn.end() }) }) - .catch(closedError, function(err) { + .catch(closedError, function() { return port }) } @@ -105,7 +105,7 @@ devutil.listPidsByComm = function(adb, serial, comm, bin) { return adb.shell(serial, ['ps', comm]) .then(function(out) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { var header = false , pids = [] out.pipe(split()) @@ -147,7 +147,7 @@ devutil.killProcsByComm = function(adb, serial, comm, bin, mode) { } return adb.shell(serial, ['kill', mode || -15].concat(pids)) .then(function(out) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { out.on('end', resolve) }) }) @@ -165,8 +165,8 @@ devutil.makeIdentity = function(serial, properties) { var model = properties['ro.product.model'] , brand = properties['ro.product.brand'] , manufacturer = properties['ro.product.manufacturer'] - , operator = properties['gsm.sim.operator.alpha'] - || properties['gsm.operator.alpha'] + , operator = properties['gsm.sim.operator.alpha'] || + properties['gsm.operator.alpha'] , version = properties['ro.build.version.release'] , sdk = properties['ro.build.version.sdk'] , abi = properties['ro.product.cpu.abi'] diff --git a/lib/util/logger.js b/lib/util/logger.js index b96dd72f..c36f2493 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,9 +1,41 @@ var util = require('util') var events = require('events') -var colors = require('colors') +// Enable "string".color +require('colors') -function Log(tag, stream) { +var Logger = new events.EventEmitter() + +Logger.Level = { + DEBUG: 1 +, VERBOSE: 2 +, INFO: 3 +, WARNING: 4 +, ERROR: 5 +, FATAL: 6 +} + +Logger.LevelLabel = { + 1: 'DBG' +, 2: 'VRB' +, 3: 'INF' +, 4: 'WRN' +, 5: 'ERR' +, 6: 'FTL' +} + +Logger.globalIdentifier = '*' + +Logger.createLogger = function(tag) { + return new Log(tag) +} + +Logger.setGlobalIdentifier = function(identifier) { + Logger.globalIdentifier = identifier + return Logger +} + +function Log(tag) { this.tag = tag this.names = { 1: 'DBG' @@ -95,35 +127,4 @@ Log.prototype._write = function(entry) { Logger.emit('entry', entry) } -var Logger = new events.EventEmitter() - -Logger.Level = { - DEBUG: 1 -, VERBOSE: 2 -, INFO: 3 -, WARNING: 4 -, ERROR: 5 -, FATAL: 6 -} - -Logger.LevelLabel = { - 1: 'DBG' -, 2: 'VRB' -, 3: 'INF' -, 4: 'WRN' -, 5: 'ERR' -, 6: 'FTL' -} - -Logger.globalIdentifier = '*' - -Logger.createLogger = function(tag) { - return new Log(tag) -} - -Logger.setGlobalIdentifier = function(identifier) { - Logger.globalIdentifier = identifier - return Logger -} - exports = module.exports = Logger diff --git a/lib/util/procutil.js b/lib/util/procutil.js index 171871e3..2c89762b 100644 --- a/lib/util/procutil.js +++ b/lib/util/procutil.js @@ -54,10 +54,10 @@ module.exports.fork = function() { process.removeListener('SIGINT', sigintListener) process.removeListener('SIGTERM', sigtermListener) }) - .catch(Promise.CancellationError, function(err) { - return new Promise(function(resolve, reject) { + .catch(Promise.CancellationError, function() { + return new Promise(function(resolve) { proc.on('exit', function() { - resolver.resolve() + resolve() }) proc.kill() }) diff --git a/lib/util/streamutil.js b/lib/util/streamutil.js index b3ca3358..82c9c5af 100644 --- a/lib/util/streamutil.js +++ b/lib/util/streamutil.js @@ -27,7 +27,7 @@ module.exports.readAll = function(stream) { function readableListener() { var chunk; - while (chunk = stream.read()) { + while ((chunk = stream.read())) { collected = Buffer.concat([collected, chunk]) } } diff --git a/webpack.config.js b/webpack.config.js index 19ce8a79..990f5936 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,6 +1,5 @@ var pathutil = require('./lib/util/pathutil') var webpack = require('webpack') -var path = require('path') module.exports = { cache: true, @@ -30,12 +29,18 @@ module.exports = { { test: /\.jpg$/, loader: "url-loader?limit=5000&mimetype=image/jpeg" }, { test: /\.png$/, loader: "url-loader?limit=5000&mimetype=image/png" }, { test: /\.gif$/, loader: "url-loader?limit=5000&mimetype=image/gif" }, - { test: /\.svg$/, loader: "url-loader?limit=5000&mimetype=image/svg+xml" }, - { test: /\.woff$/, loader: "url-loader?limit=5000&mimetype=application/font-woff" }, - { test: /\.otf$/, loader: "url-loader?limit=5000&mimetype=application/font-woff" }, - { test: /\.ttf$/, loader: "url-loader?limit=5000&mimetype=application/font-woff" }, - { test: /\.eot$/, loader: "url-loader?limit=5000&mimetype=vnd.ms-fontobject" }, - { test: /\.jade/, loader: 'template-html-loader' }, + { test: /\.svg$/ + , loader: "url-loader?limit=5000&mimetype=image/svg+xml" }, + { test: /\.woff$/ + , loader: "url-loader?limit=5000&mimetype=application/font-woff" }, + { test: /\.otf$/ + , loader: "url-loader?limit=5000&mimetype=application/font-woff" }, + { test: /\.ttf$/ + , loader: "url-loader?limit=5000&mimetype=application/font-woff" }, + { test: /\.eot$/ + , loader: "url-loader?limit=5000&mimetype=vnd.ms-fontobject" }, + { test: /\.jade/ + , loader: 'template-html-loader' }, { test: /\.html/, loader: 'html-loader' }, { test: /angular\.js/, loader: 'exports?angular'}, { test: /angular-route\.js/, loader: 'imports?angular=angular'}, @@ -50,15 +55,16 @@ module.exports = { }, plugins: [ new webpack.ResolverPlugin( - new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('bower.json', ['main']) + new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin( + 'bower.json' + , ['main'] + ) ), new webpack.ResolverPlugin( - new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('.bower.json', ['main']) + new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin( + '.bower.json' + , ['main'] + ) ) - -// new webpack.ResolverPlugin( -// new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('package.json', ['main']) -// ) -// ,new webpack.optimize.UglifyJsPlugin({mangle: false}) ] }