diff --git a/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap b/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap index fa67cedf2..650a40dee 100644 --- a/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap +++ b/packages/webpack5/__tests__/configuration/__snapshots__/vue.spec.ts.snap @@ -148,6 +148,10 @@ exports[`vue configuration for android 1`] = ` { loader: 'css2json-loader' }, + /* config.module.rule('css').use('vue-css-loader') */ + { + loader: 'vue-loader/lib/loaders/stylePostLoader.js' + }, /* config.module.rule('css').use('postcss-loader') */ { loader: 'postcss-loader', @@ -173,6 +177,10 @@ exports[`vue configuration for android 1`] = ` { loader: 'css2json-loader' }, + /* config.module.rule('scss').use('vue-css-loader') */ + { + loader: 'vue-loader/lib/loaders/stylePostLoader.js' + }, /* config.module.rule('scss').use('postcss-loader') */ { loader: 'postcss-loader', @@ -481,6 +489,10 @@ exports[`vue configuration for ios 1`] = ` { loader: 'css2json-loader' }, + /* config.module.rule('css').use('vue-css-loader') */ + { + loader: 'vue-loader/lib/loaders/stylePostLoader.js' + }, /* config.module.rule('css').use('postcss-loader') */ { loader: 'postcss-loader', @@ -506,6 +518,10 @@ exports[`vue configuration for ios 1`] = ` { loader: 'css2json-loader' }, + /* config.module.rule('scss').use('vue-css-loader') */ + { + loader: 'vue-loader/lib/loaders/stylePostLoader.js' + }, /* config.module.rule('scss').use('postcss-loader') */ { loader: 'postcss-loader', diff --git a/packages/webpack5/src/configuration/vue.ts b/packages/webpack5/src/configuration/vue.ts index 4a78e91dc..9c82c62b3 100644 --- a/packages/webpack5/src/configuration/vue.ts +++ b/packages/webpack5/src/configuration/vue.ts @@ -36,6 +36,21 @@ export default function (config: Config, env: IWebpackEnv = _env): Config { }; }); + // apply vue stylePostLoader to inject component scope into the css + // this would usually be automatic, however in NS we don't use the + // css-loader, so VueLoader doesn't inject the rule at all. + config.module + .rule('css') + .use('vue-css-loader') + .after('css2json-loader') + .loader('vue-loader/lib/loaders/stylePostLoader.js'); + + config.module + .rule('scss') + .use('vue-css-loader') + .after('css2json-loader') + .loader('vue-loader/lib/loaders/stylePostLoader.js'); + // set up ts support in vue files config.module .rule('ts')