diff --git a/.travis.yml b/.travis.yml
index 94ab01f..9d7745e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,5 @@
language: node_js
node_js:
+ - '14'
- '12'
- '10'
diff --git a/estest/index.js b/estest/index.js
new file mode 100644
index 0000000..b4d1af9
--- /dev/null
+++ b/estest/index.js
@@ -0,0 +1,24 @@
+import {createRequire} from 'module';
+
+const meow = createRequire(import.meta.url)('../index.js');
+
+meow(`
+ Usage
+ $ estest
+
+ Options
+ --rainbow, -r Include a rainbow
+
+ Examples
+ $ estest unicorns --rainbow
+ 🌈 unicorns 🌈
+`,
+ {
+ flags: {
+ rainbow: {
+ type: 'boolean',
+ alias: 'r'
+ }
+ }
+ }
+);
diff --git a/estest/package.json b/estest/package.json
new file mode 100644
index 0000000..eedaaed
--- /dev/null
+++ b/estest/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "estest",
+ "type": "module",
+ "version": "1.2.3"
+}
diff --git a/package.json b/package.json
index ae016b4..6b163bb 100644
--- a/package.json
+++ b/package.json
@@ -63,6 +63,9 @@
"rules": {
"unicorn/no-process-exit": "off",
"node/no-unsupported-features/es-syntax": "off"
- }
+ },
+ "ignores": [
+ "estest/index.js"
+ ]
}
}
diff --git a/readme.md b/readme.md
index 8071317..833acf1 100644
--- a/readme.md
+++ b/readme.md
@@ -26,6 +26,8 @@ $ npm install meow
$ ./foo-app.js unicorns --rainbow
```
+**CommonJS**
+
```js
#!/usr/bin/env node
'use strict';
@@ -61,6 +63,44 @@ const cli = meow(`
foo(cli.input[0], cli.flags);
```
+**ES Modules**
+
+```js
+#!/usr/bin/env node
+import {createRequire} from 'module';
+import foo from './lib/index.js';
+
+const meow = createRequire(import.meta.url)('meow');
+
+const cli = meow(`
+ Usage
+ $ foo
+
+ Options
+ --rainbow, -r Include a rainbow
+
+ Examples
+ $ foo unicorns --rainbow
+ 🌈 unicorns 🌈
+`, {
+ flags: {
+ rainbow: {
+ type: 'boolean',
+ alias: 'r'
+ }
+ }
+});
+/*
+{
+ input: ['unicorns'],
+ flags: {rainbow: true},
+ ...
+}
+*/
+
+foo(cli.input[0], cli.flags);
+```
+
## API
### meow(helpText, options?)
diff --git a/test.js b/test.js
index d3e40ec..0060af6 100644
--- a/test.js
+++ b/test.js
@@ -1,9 +1,12 @@
import test from 'ava';
import indentString from 'indent-string';
import execa from 'execa';
+import path from 'path';
import pkg from './package.json';
import meow from '.';
+const NODE_MAJOR_VERSION = process.versions.node.split('.')[0];
+
test('return object', t => {
const cli = meow({
argv: ['foo', '--foo-bar', '-u', 'cat', '--', 'unicorn', 'cake'],
@@ -307,3 +310,16 @@ test('supports `number` flag type - throws on incorrect default value', t => {
});
});
});
+
+if (NODE_MAJOR_VERSION >= 14) {
+ test('supports es modules', async t => {
+ try {
+ const {stdout} = await execa('node', ['index.js', '--version'], {
+ cwd: path.join(__dirname, 'estest')
+ });
+ t.regex(stdout, /1.2.3/);
+ } catch (error) {
+ t.is(error, undefined);
+ }
+ });
+}