From afc929edf20c093021d9748fe90fe75538d4b182 Mon Sep 17 00:00:00 2001 From: Dan Freeman Date: Thu, 16 Dec 2021 15:45:20 +0100 Subject: [PATCH] Accept custom `css-loader` and `style-loader` config --- packages/webpack/src/ember-webpack.ts | 7 ++++++- packages/webpack/src/options.ts | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/webpack/src/ember-webpack.ts b/packages/webpack/src/ember-webpack.ts index ef089ed7f..5b7fd8728 100644 --- a/packages/webpack/src/ember-webpack.ts +++ b/packages/webpack/src/ember-webpack.ts @@ -76,6 +76,8 @@ const Webpack: PackagerConstructor = class Webpack implements Packager private publicAssetURL: string | undefined; private extraThreadLoaderOptions: object | false | undefined; private extraBabelLoaderOptions: BabelLoaderOptions | undefined; + private extraCssLoaderOptions: object | undefined; + private extraStyleLoaderOptions: object | undefined; constructor( pathToVanillaApp: string, @@ -93,6 +95,8 @@ const Webpack: PackagerConstructor = class Webpack implements Packager this.publicAssetURL = options?.publicAssetURL; this.extraThreadLoaderOptions = options?.threadLoaderOptions; this.extraBabelLoaderOptions = options?.babelLoaderOptions; + this.extraCssLoaderOptions = options?.cssLoaderOptions; + this.extraStyleLoaderOptions = options?.styleLoaderOptions; warmUp(this.extraThreadLoaderOptions); } @@ -484,13 +488,14 @@ const Webpack: PackagerConstructor = class Webpack implements Packager return [ variant.optimizeForProduction ? MiniCssExtractPlugin.loader - : { loader: 'style-loader', options: { injectType: 'styleTag' } }, + : { loader: 'style-loader', options: { injectType: 'styleTag', ...this.extraStyleLoaderOptions } }, { loader: 'css-loader', options: { url: true, import: true, modules: 'global', + ...this.extraCssLoaderOptions, }, }, ]; diff --git a/packages/webpack/src/options.ts b/packages/webpack/src/options.ts index 8279b1592..28210e4c0 100644 --- a/packages/webpack/src/options.ts +++ b/packages/webpack/src/options.ts @@ -30,4 +30,17 @@ export interface Options { threadLoaderOptions?: object | false; babelLoaderOptions?: BabelLoaderOptions; + + /** + * Options for [`css-loader`](https://webpack.js.org/loaders/css-loader) + */ + cssLoaderOptions?: object; + + /** + * Options for [`style-loader`](https://webpack.js.org/loaders/style-loader/). + * + * Note that [`mini-css-extract-plugin`](https://webpack.js.org/plugins/mini-css-extract-plugin/) + * is used instead of `style-loader` in production builds. + */ + styleLoaderOptions?: object; }