diff --git a/babel.config.js b/babel.config.js
index 52e5023b97e10f51eb74d6445a66b5852d220429..bcd1b025b71b757975dc85eda2f26e9246ff9f9a 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -3,6 +3,11 @@
  * compatible with IE11 and Edge.
  */
 
+const moduleFormatMap = {
+  cjs: 'commonjs',
+  es: false,
+};
+
 // eslint-disable-next-line func-names
 module.exports = function (api) {
   const isDevelopmentEnv = api.env('development');
@@ -26,7 +31,7 @@ module.exports = function (api) {
         corejs: 3,
         exclude: ['transform-typeof-symbol'],
         forceAllTransforms: true,
-        modules: false,
+        modules: moduleFormatMap[process.env.MODULE_FORMAT] || false,
         useBuiltIns: 'entry',
       },
     ],
diff --git a/package.json b/package.json
index 909f59f87d694f0d54c44df665f47cea63bd1391..0e3cc2c97db0b5f990be74ef31ef189f01f06e2f 100644
--- a/package.json
+++ b/package.json
@@ -16,9 +16,10 @@
     "test:watch": "jest -c jest.json --watch",
     "build": "webpack --mode=production",
     "build:dev": "webpack --mode=development",
-    "build:es": "mkdir -p dist/es && cp -r src dist/es && babel dist/es -d dist/es",
+    "build:es": "mkdir -p dist/es && cp -r src dist/es && MODULE_FORMAT=es babel dist/es -d dist/es",
+    "build:cjs": "mkdir -p dist/cjs && cp -r src dist/cjs && MODULE_FORMAT=cjs babel dist/cjs -d dist/cjs",
     "build:watch": "webpack --watch --mode=development",
-    "prepublishOnly": "npm run clean && npm run build:es && npm run build",
+    "prepublishOnly": "npm run clean && npm run build:es && npm run build:cjs && npm run build",
     "size": "bundlewatch --config bundlewatch.config.json",
     "start": "npm run build:dev && concurrently \"npm run build:watch\" \"npm run server -- -p 4444\"",
     "server:json": "node ./scripts/json-server/server.js >> ./scripts/json-server/json-server.log"