diff --git a/README.md b/README.md
index 040b848f..a16cc1aa 100644
--- a/README.md
+++ b/README.md
@@ -90,7 +90,7 @@ import JSON5 from 'json5'
### Browsers
```html
-
+
```
This will create a global `JSON5` variable.
diff --git a/build/es5.js b/build/es5.js
index 1123c534..957c7c97 100644
--- a/build/es5.js
+++ b/build/es5.js
@@ -1,6 +1,6 @@
require('core-js/fn/string/code-point-at')
require('core-js/fn/string/from-code-point')
-const JSON5 = require('../lib')
+const JSON5 = require('../lib/index.js')
module.exports = JSON5
diff --git a/build/package.js b/build/package.js
index 9abf3f79..39f5f769 100644
--- a/build/package.js
+++ b/build/package.js
@@ -1,7 +1,7 @@
const fs = require('fs')
const path = require('path')
-const JSON5 = require('../lib')
+const JSON5 = require('../lib/index.js')
const pkg = require('../package.json')
diff --git a/lib/cli.js b/lib/cli.js
index 93cb8092..e88a36e7 100644
--- a/lib/cli.js
+++ b/lib/cli.js
@@ -3,7 +3,7 @@
const fs = require('fs')
const path = require('path')
const pkg = require('../package.json')
-const JSON5 = require('./')
+const JSON5 = require('./index.js')
const argv = parseArgs()
diff --git a/lib/index.mjs b/lib/index.mjs
new file mode 100644
index 00000000..e8840d05
--- /dev/null
+++ b/lib/index.mjs
@@ -0,0 +1,7 @@
+/* eslint-disable node/no-unsupported-features/es-syntax */
+
+import JSON5 from './index.js'
+
+export const parse = JSON5.parse
+export const stringify = JSON5.stringify
+export default JSON5
diff --git a/lib/index.mjs.d.ts b/lib/index.mjs.d.ts
new file mode 100644
index 00000000..7c6a8700
--- /dev/null
+++ b/lib/index.mjs.d.ts
@@ -0,0 +1,5 @@
+import parse = require('./parse')
+import stringify = require('./stringify')
+
+export {parse, stringify}
+export default {parse, stringify}
diff --git a/lib/register.js b/lib/register.js
index 935cdbaf..6eea8de8 100644
--- a/lib/register.js
+++ b/lib/register.js
@@ -1,5 +1,5 @@
const fs = require('fs')
-const JSON5 = require('./')
+const JSON5 = require('./index.js')
// eslint-disable-next-line node/no-deprecated-api
require.extensions['.json5'] = function (module, filename) {
diff --git a/package.json b/package.json
index 41a3f68f..2382b638 100644
--- a/package.json
+++ b/package.json
@@ -3,9 +3,10 @@
"version": "2.2.1",
"description": "JSON for humans.",
"main": "lib/index.js",
- "module": "dist/index.mjs",
+ "module": "lib/index.mjs",
"bin": "lib/cli.js",
- "browser": "dist/index.js",
+ "browser": "dist/json5.umd.js",
+ "unpkg": "dist/json5.umd.js",
"types": "lib/index.d.ts",
"files": [
"lib/",
diff --git a/rollup.config.js b/rollup.config.js
index 871066d8..a4d36dfd 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -8,11 +8,19 @@ module.exports = [
// ES5 Non-minified
{
input: 'build/es5.js',
- output: {
- file: pkg.browser,
- format: 'umd',
- name: 'JSON5',
- },
+ output: [
+ {
+ file: pkg.browser,
+ format: 'umd',
+ name: 'JSON5',
+ },
+ {
+ // Legacy path
+ file: 'dist/index.js',
+ format: 'umd',
+ name: 'JSON5',
+ },
+ ],
plugins: [
resolve(),
commonjs(),
@@ -22,11 +30,19 @@ module.exports = [
// ES5 Minified
{
input: 'build/es5.js',
- output: {
- file: pkg.browser.replace(/\.js$/, '.min.js'),
- format: 'umd',
- name: 'JSON5',
- },
+ output: [
+ {
+ file: pkg.browser.replace(/\.js$/, '.min.js'),
+ format: 'umd',
+ name: 'JSON5',
+ },
+ {
+ // Legacy path
+ file: 'dist/index.min.js',
+ format: 'umd',
+ name: 'JSON5',
+ },
+ ],
plugins: [
resolve(),
commonjs(),
@@ -36,11 +52,18 @@ module.exports = [
},
// ES6 Modules Non-minified
{
- input: 'lib/index.js',
- output: {
- file: pkg.browser.replace(/\.js$/, '.mjs'),
- format: 'esm',
- },
+ input: 'lib/index.mjs',
+ output: [
+ {
+ file: pkg.browser.replace(/\.umd\.js$/, '.esm.js'),
+ format: 'esm',
+ },
+ {
+ // Legacy path
+ file: 'dist/index.mjs',
+ format: 'esm',
+ },
+ ],
plugins: [
resolve(),
commonjs(),
@@ -48,11 +71,18 @@ module.exports = [
},
// ES6 Modules Minified
{
- input: 'lib/index.js',
- output: {
- file: pkg.browser.replace(/\.js$/, '.min.mjs'),
- format: 'esm',
- },
+ input: 'lib/index.mjs',
+ output: [
+ {
+ file: pkg.browser.replace(/\.umd\.js$/, '.esm.min.mjs'),
+ format: 'esm',
+ },
+ {
+ // Legacy path
+ file: 'dist/index.min.mjs',
+ format: 'esm',
+ },
+ ],
plugins: [
resolve(),
commonjs(),
diff --git a/test/errors.js b/test/errors.js
index 1d1657c6..115dea94 100644
--- a/test/errors.js
+++ b/test/errors.js
@@ -1,5 +1,5 @@
const assert = require('assert')
-const JSON5 = require('../lib')
+const JSON5 = require('..')
require('tap').mochaGlobals()
diff --git a/test/index.mjs b/test/index.mjs
new file mode 100644
index 00000000..e09bdb41
--- /dev/null
+++ b/test/index.mjs
@@ -0,0 +1,8 @@
+/* eslint-disable import/no-duplicates, node/no-unsupported-features/es-syntax */
+
+import JSON5Modules from '..'
+import JSON5CommonJS from '../lib/index.js'
+
+import t from 'tap'
+
+t.strictSame(JSON5Modules, JSON5CommonJS, 'Modules export and CommonJS export are the same')
diff --git a/test/parse.js b/test/parse.js
index 59fbdd15..e87f98b7 100644
--- a/test/parse.js
+++ b/test/parse.js
@@ -1,6 +1,6 @@
const assert = require('assert')
const sinon = require('sinon')
-const JSON5 = require('../lib')
+const JSON5 = require('..')
require('tap').mochaGlobals()
diff --git a/test/stringify.js b/test/stringify.js
index a0c494f0..9933885a 100644
--- a/test/stringify.js
+++ b/test/stringify.js
@@ -1,5 +1,5 @@
const assert = require('assert')
-const JSON5 = require('../lib')
+const JSON5 = require('..')
require('tap').mochaGlobals()