From acddab20769d1bb6125f2da78ac47561c682fc98 Mon Sep 17 00:00:00 2001 From: Sebastiaan Marynissen Date: Sun, 22 Nov 2020 14:31:46 +0100 Subject: [PATCH] feat(build): enable named esm module import on node.js >= 14 (#1872) Co-authored-by: Kia King Ishii --- package.json | 10 +++++++++- scripts/build.js | 6 +++++- src/index.mjs | 26 ++++++++++++++++++++++++++ test/esm/esm-import.mjs | 30 ++++++++++++++++++++++++++++++ test/esm/esm-test.js | 8 ++++++++ 5 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/index.mjs create mode 100644 test/esm/esm-import.mjs create mode 100644 test/esm/esm-test.js diff --git a/package.json b/package.json index e86145e19..4aee12ccf 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,13 @@ "version": "3.5.1", "description": "state management for Vue.js", "main": "dist/vuex.common.js", + "exports": { + ".": { + "require": "./dist/vuex.common.js", + "import": "./dist/vuex.mjs" + }, + "./": "./" + }, "module": "dist/vuex.esm.js", "unpkg": "dist/vuex.js", "jsdelivr": "dist/vuex.js", @@ -21,11 +28,12 @@ "build:main": "node scripts/build-main.js", "build:logger": "node scripts/build-logger.js", "lint": "eslint src test", - "test": "npm run lint && npm run test:types && npm run test:unit && npm run test:ssr && npm run test:e2e", + "test": "npm run lint && npm run test:types && npm run test:unit && npm run test:ssr && npm run test:e2e && npm run test:esm", "test:unit": "jest --testPathIgnorePatterns test/e2e", "test:e2e": "start-server-and-test dev http://localhost:8080 'jest --testPathIgnorePatterns test/unit'", "test:ssr": "cross-env VUE_ENV=server jest --testPathIgnorePatterns test/e2e", "test:types": "tsc -p types/test", + "test:esm": "node test/esm/esm-test.js", "coverage": "jest --testPathIgnorePatterns test/e2e --coverage", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", "release": "node scripts/release.js", diff --git a/scripts/build.js b/scripts/build.js index b77b162af..cfb554c96 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -5,7 +5,7 @@ const { gzipSync } = require('zlib') const { compress } = require('brotli') async function run(config, files) { - await build(config) + await Promise.all([build(config), copy()]) checkAllSizes(files) } @@ -13,6 +13,10 @@ async function build(config) { await execa('rollup', ['-c', config], { stdio: 'inherit' }) } +async function copy() { + await fs.copy('src/index.mjs', 'dist/vuex.mjs') +} + function checkAllSizes(files) { console.log() files.map((f) => checkSize(f)) diff --git a/src/index.mjs b/src/index.mjs new file mode 100644 index 000000000..2140898f4 --- /dev/null +++ b/src/index.mjs @@ -0,0 +1,26 @@ +import Vuex from '../dist/vuex.common.js' + +const { + Store, + install, + version, + mapState, + mapMutations, + mapGetters, + mapActions, + createNamespacedHelpers, + createLogger +} = Vuex + +export { + Vuex as default, + Store, + install, + version, + mapState, + mapMutations, + mapGetters, + mapActions, + createNamespacedHelpers, + createLogger +} diff --git a/test/esm/esm-import.mjs b/test/esm/esm-import.mjs new file mode 100644 index 000000000..b708c9b77 --- /dev/null +++ b/test/esm/esm-import.mjs @@ -0,0 +1,30 @@ +import assert from 'assert' + +import { createRequire } from 'module' + +import Vuex, { + Store, + install, + version, + mapState, + mapMutations, + mapGetters, + mapActions, + createNamespacedHelpers, + createLogger +} from 'vuex' + +const require = createRequire(import.meta.url) + +const cjs = require('vuex') + +assert.equal(Vuex, cjs) +assert.equal(Store, cjs.Store) +assert.equal(install, cjs.install) +assert.equal(version, cjs.version) +assert.equal(mapState, cjs.mapState) +assert.equal(mapMutations, cjs.mapMutations) +assert.equal(mapGetters, cjs.mapGetters) +assert.equal(mapActions, cjs.mapActions) +assert.equal(createNamespacedHelpers, cjs.createNamespacedHelpers) +assert.equal(createLogger, cjs.createLogger) diff --git a/test/esm/esm-test.js b/test/esm/esm-test.js new file mode 100644 index 000000000..bd2cd6c11 --- /dev/null +++ b/test/esm/esm-test.js @@ -0,0 +1,8 @@ +// only test esm entry points on Node.14 or higher +const [major] = process.versions.node.split('.') + +if (+major >= 14) { + (async function () { + await import('./esm-import.mjs') + })().catch(console.error) +}