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); + } + }); +}