diff --git a/src/index.cjs b/src/index.cjs index cf5add4..e5bd70e 100644 --- a/src/index.cjs +++ b/src/index.cjs @@ -33,8 +33,9 @@ class ScratchWebpackConfigBuilder { * @param {boolean} [options.enableReact] Whether to enable React and JSX support. * @param {string} [options.libraryName] The name of the library to build. Shorthand for `output.library.name`. * @param {string|URL} [options.srcPath] The absolute path to the source files. Defaults to `src` under `rootPath`. + * @param {boolean} [options.shouldOptimize] Whether to enable optimization. */ - constructor ({distPath, enableReact, libraryName, rootPath, srcPath}) { + constructor({ distPath, enableReact, libraryName, rootPath, srcPath, shouldOptimize}) { const isProduction = process.env.NODE_ENV === 'production'; const mode = isProduction ? 'production' : 'development'; @@ -42,6 +43,7 @@ class ScratchWebpackConfigBuilder { this._rootPath = toPath(rootPath) || '.'; // '.' will cause a webpack error since src must be absolute this._srcPath = toPath(srcPath) ?? path.resolve(this._rootPath, 'src'); this._distPath = toPath(distPath) ?? path.resolve(this._rootPath, 'dist'); + this._shouldOptimize = shouldOptimize /** * @type {Configuration} @@ -52,14 +54,16 @@ class ScratchWebpackConfigBuilder { entry: libraryName ? { [libraryName]: path.resolve(this._srcPath, 'index') } : path.resolve(this._srcPath, 'index'), - optimization: { - minimize: isProduction, - splitChunks: { - chunks: 'all', - filename: DEFAULT_CHUNK_FILENAME - }, - mergeDuplicateChunks: true - }, + optimization: shouldOptimize + ? { + minimize: isProduction, + splitChunks: { + chunks: 'all', + filename: DEFAULT_CHUNK_FILENAME, + }, + mergeDuplicateChunks: true, + } + : {}, output: { clean: true, filename: '[name].js', @@ -91,6 +95,12 @@ class ScratchWebpackConfigBuilder { { test: enableReact ? /\.[cm]?jsx?$/ : /\.[cm]?js$/, loader: 'babel-loader', + exclude: [ + { + and: [/node_modules/], + not: [/node_modules\/scratch-/] + } + ], options: { presets: [ '@babel/preset-env', @@ -139,7 +149,8 @@ class ScratchWebpackConfigBuilder { libraryName: this._libraryName, rootPath: this._rootPath, srcPath: this._srcPath, - distPath: this._distPath + distPath: this._distPath, + shouldOptimize: this._shouldOptimize }).merge(this._config); }