diff --git a/package.json b/package.json index e43c9f798..64d7911b2 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,13 @@ "version": "4.0.0-rc.1", "description": "state management for Vue.js", "main": "dist/vuex.cjs.js", + "exports": { + ".": { + "require": "./dist/vuex.cjs.js", + "import": "./dist/vuex.mjs" + }, + "./": "./" + }, "module": "dist/vuex.esm-bundler.js", "browser": "dist/vuex.esm-browser.js", "unpkg": "dist/vuex.global.js", @@ -20,11 +27,12 @@ "dev": "node examples/server.js", "build": "node scripts/build.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 build && 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 d15eb85f1..bd7510298 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -14,7 +14,7 @@ const files = [ ] async function run() { - await build() + await Promise.all([build(), copy()]) checkAllSizes() } @@ -22,6 +22,10 @@ async function build() { await execa('rollup', ['-c', 'rollup.config.js'], { stdio: 'inherit' }) } +async function copy() { + await fs.copy('src/index.mjs', 'dist/vuex.mjs') + } + function checkAllSizes() { console.log() files.map((f) => checkSize(f)) diff --git a/src/index.mjs b/src/index.mjs new file mode 100644 index 000000000..d2f37f4f7 --- /dev/null +++ b/src/index.mjs @@ -0,0 +1,30 @@ +import Vuex from '../dist/vuex.cjs.js' + +const { + version, + createStore, + Store, + install, + useStore, + mapState, + mapMutations, + mapGetters, + mapActions, + createNamespacedHelpers, + createLogger +} = Vuex + +export { + Vuex as default, + version, + createStore, + Store, + install, + useStore, + 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) +}