From 9db935820410cd2f0a84a965aa2a1cbe4afae326 Mon Sep 17 00:00:00 2001 From: Xiaoji Chen Date: Fri, 6 Jan 2023 10:37:39 -0800 Subject: [PATCH] Support es modules --- .babelrc.js | 3 +++ package.json | 5 +++-- utils/build.js | 18 +++++++++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.babelrc.js b/.babelrc.js index 075709d9..9ee8d3cf 100644 --- a/.babelrc.js +++ b/.babelrc.js @@ -1,6 +1,9 @@ module.exports = { "presets": ["@babel/env"], "env": { + "cjs": { + "plugins": [["add-import-extension", {extension: 'cjs', replace: true}]] + }, "esm": { "presets": [["@babel/env", { "modules": false }]] } diff --git a/package.json b/package.json index 784b6835..c81b5ec8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Javascript Matrix and Vector library for High Performance WebGL apps", "private": true, "sideEffects": false, - "main": "dist/cjs/index.js", + "main": "dist/cjs/index.cjs", "module": "dist/esm/index.js", "homepage": "http://glmatrix.net", "license": "MIT", @@ -32,7 +32,7 @@ "update-license-version": "node utils/update-license-version.js", "build-umd": "rollup -c", "build-esm": "cross-env BABEL_ENV=esm babel src -d dist/esm", - "build-cjs": "babel src -d dist/cjs", + "build-cjs": "cross-env BABEL_ENV=cjs babel src -d dist/cjs --out-file-extension .cjs", "build-dts": "tsc --allowJs --declaration --emitDeclarationOnly --module amd --outFile ./dist/index.d.ts ./src/index.js ./src/types.d.ts && node ./utils/bundle-dts.js && tsc --noEmit ./dist/index.d.ts", "build": "del dist && npm run update-license-version && npm run build-umd && npm run build-esm && npm run build-cjs && npm run build-dts && node ./utils/build.js", "prepare": "npm run build" @@ -42,6 +42,7 @@ "@babel/core": "7.9.0", "@babel/preset-env": "7.9.0", "@babel/register": "7.9.0", + "babel-plugin-add-import-extension": "1.6.0", "cross-env": "7.0.2", "del-cli": "3.0.0", "jsdoc": "3.6.3", diff --git a/utils/build.js b/utils/build.js index 5d28d06a..d02900f0 100644 --- a/utils/build.js +++ b/utils/build.js @@ -10,9 +10,15 @@ const copyFileSync = (source, dest) => { delete pkg.private; delete pkg.scripts; delete pkg.devDependencies; -pkg.main = 'cjs/index.js' +pkg.type = 'module'; +pkg.main = 'cjs/index.cjs' pkg.module = 'esm/index.js' -fs.writeFileSync('dist/package.json', JSON.stringify(pkg, null, 2)); +pkg.exports = { + '.': { + require: './cjs/index.cjs', + import: './esm/index.js' + } +}; copyFileSync('README.md', 'dist/README.md'); copyFileSync('LICENSE.md', 'dist/LICENSE.md'); @@ -23,9 +29,13 @@ const files = fs.readdirSync('src') const name = file.endsWith('.js') ? file.slice(0, -3) : file; const filePkg = { name: `gl-matrix/${name}`, - main: `../cjs/${file}`, + main: `../cjs/${file.replace('.js', '.cjs')}`, module: `../esm/${file}`, }; + pkg.exports[`./${name}`] = { + require: `./cjs/${file.replace('.js', '.cjs')}`, + import: `./esm/${file}`, + }; if(!fs.existsSync(`dist/${name}`)) { fs.mkdirSync(`dist/${name}`); } @@ -34,3 +44,5 @@ const files = fs.readdirSync('src') JSON.stringify(filePkg, null, 2) ); }); + +fs.writeFileSync('dist/package.json', JSON.stringify(pkg, null, 2));