diff --git a/package.json b/package.json
index abe1041..509d5d1 100644
--- a/package.json
+++ b/package.json
@@ -69,20 +69,20 @@
   ],
   "dependencies": {},
   "devDependencies": {
-    "eslint": "^4.7.2",
-    "eslint-config-semistandard": "^11.0.0",
-    "eslint-config-standard": "^10.2.1",
-    "eslint-plugin-import": "^2.7.0",
-    "eslint-plugin-node": "^5.1.1",
-    "eslint-plugin-promise": "^3.5.0",
-    "eslint-plugin-standard": "^3.0.1",
-    "grunt": "^1.0.1",
-    "grunt-contrib-clean": "^1.0.0",
-    "jasmine-core": "^3.2.1",
-    "karma": "^3.0.0",
+    "eslint": "^5.16.0",
+    "eslint-config-semistandard": "^13.0.0",
+    "eslint-config-standard": "^12.0.0",
+    "eslint-plugin-import": "^2.16.0",
+    "eslint-plugin-node": "^8.0.1",
+    "eslint-plugin-promise": "^4.1.1",
+    "eslint-plugin-standard": "^4.0.0",
+    "grunt": "^1.0.4",
+    "grunt-contrib-clean": "^2.0.0",
+    "jasmine-core": "^3.3.0",
+    "karma": "^4.0.1",
     "karma-chrome-launcher": "^2.2.0",
-    "karma-jasmine": "^1.1.2",
-    "puppeteer": "^1.8.0"
+    "karma-jasmine": "^2.0.1",
+    "puppeteer": "^1.14.0"
   },
   "cordova-platforms": {
     "cordova-android": "../cordova-android",
diff --git a/src/cordova.js b/src/cordova.js
index 09d3451..838ae95 100644
--- a/src/cordova.js
+++ b/src/cordova.js
@@ -128,8 +128,8 @@
      * @return object
      */
     getOriginalHandlers: function () {
-        return {'document': {'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener},
-            'window': {'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener}};
+        return { 'document': { 'addEventListener': m_document_addEventListener, 'removeEventListener': m_document_removeEventListener },
+            'window': { 'addEventListener': m_window_addEventListener, 'removeEventListener': m_window_removeEventListener } };
     },
     /**
      * Method to fire event from native code
diff --git a/tasks/lib/compute-commit-id.js b/tasks/lib/compute-commit-id.js
index bf4221e..c3e4af1 100644
--- a/tasks/lib/compute-commit-id.js
+++ b/tasks/lib/compute-commit-id.js
@@ -33,7 +33,7 @@
     if (fs.existsSync(path.join(__dirname, '../../.git'))) {
         var gitPath = 'git';
         var args = 'rev-list HEAD --max-count=1';
-        childProcess.exec(gitPath + ' ' + args, {cwd: cordovaJSDir}, function (err, stdout, stderr) {
+        childProcess.exec(gitPath + ' ' + args, { cwd: cordovaJSDir }, function (err, stdout, stderr) {
             var isWindows = process.platform.slice(0, 3) === 'win';
             if (err && isWindows) {
                 gitPath = '"' + path.join(process.env['ProgramFiles'], 'Git', 'bin', 'git.exe') + '"';
diff --git a/test/android/test.exec.js b/test/android/test.exec.js
index 0a5ba60..cb025ee 100644
--- a/test/android/test.exec.js
+++ b/test/android/test.exec.js
@@ -169,7 +169,7 @@
         it('Test#008 : should handle payloads of JSON objects', function () {
             var messages = createCallbackMessage(true, true, 1, 'id', '{"a":1}');
             return performExecAndAwaitSingleCallback(messages).then(() => {
-                expect(callbackSpy).toHaveBeenCalledWith('id', true, 1, [{a: 1}], true);
+                expect(callbackSpy).toHaveBeenCalledWith('id', true, 1, [{ a: 1 }], true);
             });
         });
         it('Test#009 : should handle payloads of JSON arrays', function () {
diff --git a/test/test.builder.js b/test/test.builder.js
index fbbe1f7..ba71e18 100644
--- a/test/test.builder.js
+++ b/test/test.builder.js
@@ -39,7 +39,7 @@
 
     it('Test#002 : returns an empty object literal if no path', function () {
         var target = {};
-        var objects = {cat: {}};
+        var objects = { cat: {} };
 
         builder.buildIntoButDoNotClobber(objects, target);
 
diff --git a/test/test.channel.js b/test/test.channel.js
index 15e2a3f..667c70b 100644
--- a/test/test.channel.js
+++ b/test/test.channel.js
@@ -52,11 +52,11 @@
             }).not.toThrow();
 
             expect(function () {
-                multiChannel.subscribe({handleEvent: function () {}});
+                multiChannel.subscribe({ handleEvent: function () {} });
             }).not.toThrow();
 
             expect(function () {
-                multiChannel.subscribe({apply: function () {}, call: function () {}});
+                multiChannel.subscribe({ apply: function () {}, call: function () {} });
             }).toThrow();
         });
         it('Test#003 : should not change number of handlers if no function is provided', function () {
@@ -103,11 +103,11 @@
             }).not.toThrow();
 
             expect(function () {
-                multiChannel.unsubscribe({handleEvent: function () {}});
+                multiChannel.unsubscribe({ handleEvent: function () {} });
             }).not.toThrow();
 
             expect(function () {
-                multiChannel.unsubscribe({apply: function () {}, call: function () {}});
+                multiChannel.unsubscribe({ apply: function () {}, call: function () {} });
             }).toThrow();
         });
         it('Test#007 : should not decrement numHandlers if unsubscribing something that does not exist', function () {
diff --git a/test/test.modulemapper.js b/test/test.modulemapper.js
index 1b9c875..db09c75 100644
--- a/test/test.modulemapper.js
+++ b/test/test.modulemapper.js
@@ -31,7 +31,7 @@
         context = {
             func: function () {},
             num: 1,
-            obj: { str: 'hello', num: 8, subObj: {num: 9} },
+            obj: { str: 'hello', num: 8, subObj: { num: 9 } },
             TestClass: TestClass
         };
         utils.defineGetter(context, 'getme', function () { return 'getter'; });
diff --git a/test/test.utils.js b/test/test.utils.js
index d1327e1..c2ea462 100644
--- a/test/test.utils.js
+++ b/test/test.utils.js
@@ -83,7 +83,7 @@
 
     describe('when cloning', function () {
         it('Test#013 : can clone an array', function () {
-            var orig = [1, 2, 3, {four: 4}, '5'];
+            var orig = [1, 2, 3, { four: 4 }, '5'];
 
             expect(utils.clone(orig)).toEqual(orig);
             expect(utils.clone(orig)).not.toBe(orig);
