diff --git a/package.json b/package.json
index 97029bd35c..73e1b02587 100644
--- a/package.json
+++ b/package.json
@@ -63,7 +63,6 @@
 		"matchdep": "~2.0.0",
 		"node-sass": "~4.12.0",
 		"source-map-loader": "^0.2.4",
-		"uglify-js": "^3.6.0",
 		"uglifyjs-webpack-plugin": "2.2.0",
 		"wait-on": "3.3.0",
 		"webpack": "4.41.0",
diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js
index bf05904e61..ed12fbba05 100644
--- a/tools/webpack/packages.js
+++ b/tools/webpack/packages.js
@@ -5,8 +5,6 @@ const { DefinePlugin } = require( 'webpack' );
 const CopyWebpackPlugin = require( 'copy-webpack-plugin' );
 const LiveReloadPlugin = require( 'webpack-livereload-plugin' );
 const postcss = require( 'postcss' );
-const UglifyJS = require( 'uglify-js' );
-
 const { join, basename } = require( 'path' );
 const { get } = require( 'lodash' );
 
@@ -41,21 +39,6 @@ function camelCaseDash( string ) {
 	);
 }
 
-/**
- * Maps vendors to copy commands for the CopyWebpackPlugin.
- *
- * @param {Object} vendors     Vendors to include in the vendor folder.
- * @param {string} buildTarget The folder in which to build the packages.
- *
- * @return {Object[]} Copy object suitable for the CopyWebpackPlugin.
- */
-function mapVendorCopies( vendors, buildTarget ) {
-	return Object.keys( vendors ).map( ( filename ) => ( {
-		from: join( baseDir, `node_modules/${ vendors[ filename ] }` ),
-		to: join( baseDir, `${ buildTarget }/js/dist/vendor/${ filename }` ),
-	} ) );
-}
-
 module.exports = function( env = { environment: 'production', watch: false, buildTarget: false } ) {
 	const mode = env.environment;
 	const suffix = mode === 'production' ? '.min' : '';
@@ -71,37 +54,6 @@ module.exports = function( env = { environment: 'production', watch: false, buil
  		)
 		.map( ( packageName ) => packageName.replace( WORDPRESS_NAMESPACE, '' ) );
 
-	const vendors = {
-		'lodash.js': 'lodash/lodash.js',
-		'wp-polyfill.js': '@babel/polyfill/dist/polyfill.js',
-		'wp-polyfill-fetch.js': 'whatwg-fetch/dist/fetch.umd.js',
-		'wp-polyfill-element-closest.js': 'element-closest/element-closest.js',
-		'wp-polyfill-node-contains.js': 'polyfill-library/polyfills/Node/prototype/contains/polyfill.js',
-		'wp-polyfill-url.js': 'polyfill-library/polyfills/URL/polyfill.js',
-		'wp-polyfill-dom-rect.js': 'polyfill-library/polyfills/DOMRect/polyfill.js',
-		'wp-polyfill-formdata.js': 'formdata-polyfill/FormData.js',
-		'moment.js': 'moment/moment.js',
-		'react.js': 'react/umd/react.development.js',
-		'react-dom.js': 'react-dom/umd/react-dom.development.js',
-	};
-
-	const minifiedVendors = {
-		'lodash.min.js': 'lodash/lodash.min.js',
-		'wp-polyfill.min.js': '@babel/polyfill/dist/polyfill.min.js',
-		'wp-polyfill-formdata.min.js': 'formdata-polyfill/formdata.min.js',
-		'moment.min.js': 'moment/min/moment.min.js',
-		'react.min.js': 'react/umd/react.production.min.js',
-		'react-dom.min.js': 'react-dom/umd/react-dom.production.min.js',
-	};
-
-	const minifyVendors = {
-		'wp-polyfill-fetch.min.js': 'whatwg-fetch/dist/fetch.umd.js',
-		'wp-polyfill-element-closest.min.js': 'element-closest/element-closest.js',
-		'wp-polyfill-node-contains.min.js': 'polyfill-library/polyfills/Node/prototype/contains/polyfill.js',
-		'wp-polyfill-url.min.js': 'polyfill-library/polyfills/URL/polyfill.js',
-		'wp-polyfill-dom-rect.min.js': 'polyfill-library/polyfills/DOMRect/polyfill.js',
-	};
-
 	const blockNames = [
 		'archives',
 		'block',
@@ -128,19 +80,6 @@ module.exports = function( env = { environment: 'production', watch: false, buil
 		to: join( baseDir, `${ buildTarget }/blocks/[1]/block.json` ),
 	};
 
-	const developmentCopies = mapVendorCopies( vendors, buildTarget );
-	const minifiedCopies = mapVendorCopies( minifiedVendors, buildTarget );
-	const minifyCopies = mapVendorCopies( minifyVendors, buildTarget ).map( ( copyCommand ) => {
-		return {
-			...copyCommand,
-			transform: ( content ) => {
-				return UglifyJS.minify( content.toString() ).code;
-			},
-		};
-	} );
-
-	let vendorCopies = mode === "development" ? developmentCopies : [ ...minifiedCopies, ...minifyCopies ];
-
 	let cssCopies = packages.map( ( packageName ) => ( {
 		from: join( baseDir, `node_modules/@wordpress/${ packageName }/build-style/*.css` ),
 		to: join( baseDir, `${ buildTarget }/css/dist/${ packageName }/` ),
@@ -248,7 +187,6 @@ module.exports = function( env = { environment: 'production', watch: false, buil
 			} ),
 			new CopyWebpackPlugin(
 				[
-					...vendorCopies,
 					...cssCopies,
 					...phpCopies,
 					blockMetadataCopies,
diff --git a/tools/webpack/vendor.js b/tools/webpack/vendor.js
new file mode 100644
index 0000000000..f06fcc67a6
--- /dev/null
+++ b/tools/webpack/vendor.js
@@ -0,0 +1,39 @@
+/**
+ * External dependencies
+ */
+const { join } = require( 'path' );
+
+module.exports = function( env = { environment: 'production', watch: false, buildTarget: false } ) {
+	const mode = env.environment;
+	const suffix = mode === 'production' ? '.min' : '';
+	const buildTarget = env.buildTarget || ( mode === 'production' ? 'build' : 'src' );
+
+	return {
+		mode,
+
+		entry: {
+			lodash: 'lodash',
+			'wp-polyfill': '@babel/polyfill',
+			'wp-polyfill-fetch': 'whatwg-fetch',
+			'wp-polyfill-element-closest': 'element-closest',
+			'wp-polyfill-node-contains': 'polyfill-library/polyfills/Node/prototype/contains/polyfill.js',
+			'wp-polyfill-url': 'polyfill-library/polyfills/URL/polyfill.js',
+			'wp-polyfill-dom-rect': 'polyfill-library/polyfills/DOMRect/polyfill.js',
+			'wp-polyfill-formdata': 'formdata-polyfill',
+			'moment': 'moment',
+			'react': 'react',
+			'react-dom': 'react-dom',
+		},
+
+		output: {
+			filename: `[name]${ suffix }.js`,
+			path: join( __dirname, `../../${ buildTarget }/wp-includes/js/dist` ),
+		},
+
+		stats: {
+			children: false,
+		},
+
+		watch: env.watch,
+	};
+};
diff --git a/webpack.config.js b/webpack.config.js
index bc6ab59bee..c5372a23c9 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,5 +1,6 @@
 const mediaConfig = require( './tools/webpack/media' );
 const packagesConfig = require( './tools/webpack/packages' );
+const vendorConfig = require( './tools/webpack/vendor' );
 
 module.exports = function( env = { environment: "production", watch: false, buildTarget: false } ) {
 	if ( ! env.watch ) {
@@ -13,6 +14,7 @@ module.exports = function( env = { environment: "production", watch: false, buil
 	const config = [
 		mediaConfig( env ),
 		packagesConfig( env ),
+		vendorConfig( env ),
 	];
 
 	return config;
