diff --git a/bin/.eslintrc.js b/bin/.eslintrc.js
deleted file mode 100644
index ad6e812a..00000000
--- a/bin/.eslintrc.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
-  rules: {
-    'no-console': 0,
-    'no-var': 0
-  }
-};
diff --git a/bin/handlebars b/bin/handlebars
index 7749121d..17a36609 100755
--- a/bin/handlebars
+++ b/bin/handlebars
@@ -1,109 +1,115 @@
 #!/usr/bin/env node
 
-var argv = parseArgs({
-  'f': {
-    'type': 'string',
-    'description': 'Output File',
-    'alias': 'output'
-  },
-  'map': {
-    'type': 'string',
-    'description': 'Source Map File'
-  },
-  'a': {
-    'type': 'boolean',
-    'description': 'Exports amd style (require.js)',
-    'alias': 'amd'
-  },
-  'c': {
-    'type': 'string',
-    'description': 'Exports CommonJS style, path to Handlebars module',
-    'alias': 'commonjs',
-    'default': null
-  },
-  'h': {
-    'type': 'string',
-    'description': 'Path to handlebar.js (only valid for amd-style)',
-    'alias': 'handlebarPath',
-    'default': ''
-  },
-  'k': {
-    'type': 'string',
-    'description': 'Known helpers',
-    'alias': 'known'
-  },
-  'o': {
-    'type': 'boolean',
-    'description': 'Known helpers only',
-    'alias': 'knownOnly'
-  },
-  'm': {
-    'type': 'boolean',
-    'description': 'Minimize output',
-    'alias': 'min'
-  },
-  'n': {
-    'type': 'string',
-    'description': 'Template namespace',
-    'alias': 'namespace',
-    'default': 'Handlebars.templates'
-  },
-  's': {
-    'type': 'boolean',
-    'description': 'Output template function only.',
-    'alias': 'simple'
-  },
-  'N': {
-    'type': 'string',
-    'description': 'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.',
-    'alias': 'name'
-  },
-  'i': {
-    'type': 'string',
-    'description': 'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.',
-    'alias': 'string'
-  },
-  'r': {
-    'type': 'string',
-    'description': 'Template root. Base value that will be stripped from template names.',
-    'alias': 'root'
-  },
-  'p': {
-    'type': 'boolean',
-    'description': 'Compiling a partial template',
-    'alias': 'partial'
-  },
-  'd': {
-    'type': 'boolean',
-    'description': 'Include data when compiling',
-    'alias': 'data'
-  },
-  'e': {
-    'type': 'string',
-    'description': 'Template extension.',
-    'alias': 'extension',
-    'default': 'handlebars'
-  },
-  'b': {
-    'type': 'boolean',
-    'description': 'Removes the BOM (Byte Order Mark) from the beginning of the templates.',
-    'alias': 'bom'
-  },
-  'v': {
-    'type': 'boolean',
-    'description': 'Prints the current compiler version',
-    'alias': 'version'
-  },
-  'help': {
-    'type': 'boolean',
-    'description': 'Outputs this message'
-  }
-});
-
+const yargs = require('yargs')
+  .usage('Precompile handlebar templates.\nUsage: $0 [template|directory]...')
+  .option('f', {
+    type: 'string',
+    description: 'Output File',
+    alias: 'output'
+  })
+  .option('map', {
+    type: 'string',
+    description: 'Source Map File'
+  })
+  .option('a', {
+    type: 'boolean',
+    description: 'Exports amd style (require.js)',
+    alias: 'amd'
+  })
+  .option('c', {
+    type: 'string',
+    description: 'Exports CommonJS style, path to Handlebars module',
+    alias: 'commonjs',
+    default: null
+  })
+  .option('h', {
+    type: 'string',
+    description: 'Path to handlebar.js (only valid for amd-style)',
+    alias: 'handlebarPath',
+    default: ''
+  })
+  .option('k', {
+    type: 'string',
+    description: 'Known helpers',
+    alias: 'known'
+  })
+  .option('o', {
+    type: 'boolean',
+    description: 'Known helpers only',
+    alias: 'knownOnly'
+  })
+  .option('m', {
+    type: 'boolean',
+    description: 'Minimize output',
+    alias: 'min'
+  })
+  .option('n', {
+    type: 'string',
+    description: 'Template namespace',
+    alias: 'namespace',
+    default: 'Handlebars.templates'
+  })
+  .option('s', {
+    type: 'boolean',
+    description: 'Output template function only.',
+    alias: 'simple'
+  })
+  .option('N', {
+    type: 'string',
+    description:
+      'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.',
+    alias: 'name'
+  })
+  .option('i', {
+    type: 'string',
+    description:
+      'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.',
+    alias: 'string'
+  })
+  .option('r', {
+    type: 'string',
+    description:
+      'Template root. Base value that will be stripped from template names.',
+    alias: 'root'
+  })
+  .option('p', {
+    type: 'boolean',
+    description: 'Compiling a partial template',
+    alias: 'partial'
+  })
+  .option('d', {
+    type: 'boolean',
+    description: 'Include data when compiling',
+    alias: 'data'
+  })
+  .option('e', {
+    type: 'string',
+    description: 'Template extension.',
+    alias: 'extension',
+    default: 'handlebars'
+  })
+  .option('b', {
+    type: 'boolean',
+    description:
+      'Removes the BOM (Byte Order Mark) from the beginning of the templates.',
+    alias: 'bom'
+  })
+  .option('v', {
+    type: 'boolean',
+    description: 'Prints the current compiler version',
+    alias: 'version'
+  })
+  .option('help', {
+    type: 'boolean',
+    description: 'Outputs this message'
+  })
+  .wrap(120);
+
+const argv = yargs.argv;
 argv.files = argv._;
 delete argv._;
 
-var Precompiler = require('../dist/cjs/precompiler');
+const Precompiler = require('../dist/cjs/precompiler');
 Precompiler.loadTemplates(argv, function(err, opts) {
 
   if (err) {
@@ -111,66 +117,8 @@ Precompiler.loadTemplates(argv, function(err, opts) {
   }
 
   if (opts.help || (!opts.templates.length && !opts.version)) {
-    printUsage(argv._spec, 120);
+    yargs.showHelp();
   } else {
     Precompiler.cli(opts);
   }
 });
-
-function pad(n) {
-  var str = '';
-  while (str.length < n) {
-    str += ' ';
-  }
-  return str;
-}
-
-function parseArgs(spec) {
-  var opts = { alias: {}, boolean: [], default: {}, string: [] };
-
-  Object.keys(spec).forEach(function (arg) {
-    var opt = spec[arg];
-    opts[opt.type].push(arg);
-    if ('alias' in opt) opts.alias[arg] = opt.alias;
-    if ('default' in opt) opts.default[arg] = opt.default;
-  });
-
-  var argv = require('minimist')(process.argv.slice(2), opts);
-  argv._spec = spec;
-  return argv;
-}
-
-function printUsage(spec, wrap) {
-  var wordwrap = require('wordwrap');
-
-  console.log('Precompile handlebar templates.');
-  console.log('Usage: handlebars [template|directory]...');
-
-  var opts = [];
-  var width = 0;
-  Object.keys(spec).forEach(function (arg) {
-    var opt = spec[arg];
-
-    var name = (arg.length === 1 ? '-' : '--') + arg;
-    if ('alias' in opt) name += ', --' + opt.alias;
-
-    var meta = '[' + opt.type + ']';
-    if ('default' in opt) meta += ' [default: ' + JSON.stringify(opt.default) + ']';
-
-    opts.push({ name: name, desc: opt.description, meta: meta });
-    if (name.length > width) width = name.length;
-  });
-
-  console.log('Options:');
-  opts.forEach(function (opt) {
-    var desc = wordwrap(width + 4, wrap + 1)(opt.desc);
-
-    console.log('  %s%s%s%s%s',
-      opt.name,
-      pad(width - opt.name.length + 2),
-      desc.slice(width + 4),
-      pad(wrap - opt.meta.length - desc.split(/\n/).pop().length),
-      opt.meta
-      );
-  });
-}
diff --git a/package-lock.json b/package-lock.json
index 475b608a..27b46782 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1373,8 +1373,7 @@
     "camelcase": {
       "version": "5.3.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
     },
     "camelcase-keys": {
       "version": "2.1.0",
@@ -1664,6 +1663,51 @@
       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
       "dev": true
     },
+    "cliui": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+      "requires": {
+        "string-width": "^3.1.0",
+        "strip-ansi": "^5.2.0",
+        "wrap-ansi": "^5.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
     "clone": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
@@ -2278,8 +2322,7 @@
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
     },
     "decode-uri-component": {
       "version": "0.2.0",
@@ -4535,8 +4578,7 @@
     "get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "dev": true
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
     },
     "get-func-name": {
       "version": "2.0.0",
@@ -7482,7 +7524,8 @@
     "minimist": {
       "version": "1.2.5",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+      "dev": true
     },
     "mixin-deep": {
       "version": "1.3.2",
@@ -8431,7 +8474,6 @@
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
       "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
-      "dev": true,
       "requires": {
         "p-try": "^2.0.0"
       }
@@ -8457,8 +8499,7 @@
     "p-try": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
     },
     "package-hash": {
       "version": "3.0.0",
@@ -9467,14 +9508,12 @@
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-      "dev": true
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
     },
     "require-main-filename": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-      "dev": true
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
     },
     "requirejs": {
       "version": "2.3.6",
@@ -9786,8 +9825,7 @@
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-      "dev": true
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
     },
     "set-value": {
       "version": "2.0.1",
@@ -11436,8 +11474,7 @@
     "which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-      "dev": true
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
     },
     "window-size": {
       "version": "0.1.4",
@@ -11451,10 +11488,71 @@
       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
       "dev": true
     },
-    "wordwrap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+    "wrap-ansi": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+      "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "string-width": "^3.0.0",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+        },
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "color-convert": {
+          "version": "1.9.3",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+          "requires": {
+            "color-name": "1.1.3"
+          }
+        },
+        "color-name": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
     },
     "wrappy": {
       "version": "1.0.2",
@@ -11507,14 +11605,105 @@
     "y18n": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
-      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
-      "dev": true
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
     },
     "yallist": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
       "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
       "dev": true
+    },
+    "yargs": {
+      "version": "14.2.3",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
+      "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
+      "requires": {
+        "cliui": "^5.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^3.0.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^3.0.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^15.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+        },
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "15.0.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
+      "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      }
     }
   }
 }
diff --git a/package.json b/package.json
index d19a46e9..9d75276d 100644
--- a/package.json
+++ b/package.json
@@ -21,10 +21,9 @@
     "node": ">=0.4.7"
   },
   "dependencies": {
-    "minimist": "^1.2.5",
     "neo-async": "^2.6.0",
     "source-map": "^0.6.1",
-    "wordwrap": "^1.0.0"
+    "yargs": "^14.2.3"
   },
   "optionalDependencies": {
     "uglify-js": "^3.1.4"
diff --git a/spec/expected/help.menu.txt b/spec/expected/help.menu.txt
index 834f4afe..027bb73a 100644
--- a/spec/expected/help.menu.txt
+++ b/spec/expected/help.menu.txt
@@ -2,6 +2,7 @@ Precompile handlebar templates.
 Usage: handlebars [template|directory]...
 
 Options:
+  --help               Outputs this message                                                                    [boolean]
   -f, --output         Output File                                                                              [string]
   --map                Source Map File                                                                          [string]
   -a, --amd            Exports amd style (require.js)                                                          [boolean]
@@ -21,5 +22,4 @@ Options:
   -d, --data           Include data when compiling                                                             [boolean]
   -e, --extension      Template extension.                                              [string] [default: "handlebars"]
   -b, --bom            Removes the BOM (Byte Order Mark) from the beginning of the templates.                  [boolean]
-  -v, --version        Prints the current compiler version                                                     [boolean]
-  --help               Outputs this message                                                                    [boolean]
\ No newline at end of file
+  -v, --version        Show version number                                                                     [boolean]
\ No newline at end of file
