diff --git a/build/build-plugins.js b/build/build-plugins.js
index 3a8163ce029d3d63338e707bbad3c192dce2c1fc..44d155c4f9ddc339bf31741fee9c380d69a2d1d6 100644
--- a/build/build-plugins.js
+++ b/build/build-plugins.js
@@ -56,7 +56,7 @@ const defaultPluginConfig = {
   }
 }
 
-function getConfigByPluginKey(pluginKey) {
+const getConfigByPluginKey = pluginKey => {
   if (
     pluginKey === 'Data' ||
     pluginKey === 'Manipulator' ||
@@ -143,7 +143,7 @@ const domObjects = [
   'SelectorEngine'
 ]
 
-function build(plugin) {
+const build = async plugin => {
   console.log(`Building ${plugin} plugin...`)
 
   const { external, globals } = getConfigByPluginKey(plugin)
@@ -158,24 +158,32 @@ function build(plugin) {
     pluginPath = `${rootPath}/dom/`
   }
 
-  rollup.rollup({
+  const bundle = await rollup.rollup({
     input: bsPlugins[plugin],
     plugins,
     external
-  }).then(bundle => {
-    bundle.write({
-      banner: banner(pluginFilename),
-      format: 'umd',
-      name: plugin,
-      sourcemap: true,
-      globals,
-      file: path.resolve(__dirname, `${pluginPath}/${pluginFilename}`)
-    })
-      .then(() => console.log(`Building ${plugin} plugin... Done!`))
-      .catch(error => console.error(`${plugin}: ${error}`))
   })
-  .catch(error => console.error(`${plugin}: ${error}`))
+
+  await bundle.write({
+    banner: banner(pluginFilename),
+    format: 'umd',
+    name: plugin,
+    sourcemap: true,
+    globals,
+    file: path.resolve(__dirname, `${pluginPath}/${pluginFilename}`)
+  })
+
+  console.log(`Building ${plugin} plugin... Done!`)
+}
+
+const main = async () => {
+  try {
+    await Promise.all(Object.keys(bsPlugins).map(plugin => build(plugin)))
+  } catch (error) {
+    console.error(error)
+
+    process.exit(1)
+  }
 }
 
-Object.keys(bsPlugins)
-  .forEach(plugin => build(plugin))
+main()