Skip to content

Commit 9b87b41

Browse files
authored
fix(angular-rspack): process styles correctly handling urls (#40)
1 parent 4e97d8e commit 9b87b41

File tree

12 files changed

+146
-47
lines changed

12 files changed

+146
-47
lines changed

Diff for: e2e/fixtures/rspack-csr-css/rspack.config.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,15 @@ module.exports = () => {
77
root: __dirname,
88
name: 'rspack-csr-css',
99
index: './src/index.html',
10-
assets: [{ glob: '**/*', input: 'public' }],
11-
styles: ['./src/styles.css'],
10+
assets: [
11+
{
12+
input: '../shared/assets/src/assets',
13+
glob: '**/*',
14+
output: 'assets',
15+
},
16+
{ glob: '**/*', input: 'public' },
17+
],
18+
styles: ['../shared/styles/src/index.scss', './src/styles.css'],
1219
polyfills: ['zone.js'],
1320
main: './src/main.ts',
1421
outputPath: {
+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<p>{{ greeting$ | async }}</p>
2+
<p class="icon-github">&nbsp;</p>
23
<app-scss-inline-test></app-scss-inline-test>
34
<app-nx-welcome></app-nx-welcome>
45
<router-outlet></router-outlet>
2.28 KB
Loading

Diff for: e2e/fixtures/shared/styles/src/index.scss

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@import './lib/global';

Diff for: e2e/fixtures/shared/styles/src/lib/global.scss

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.icon-github {
2+
background-image: url('/assets/icons/github.png');
3+
}

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"less-loader": "^12.2.0",
7373
"nx": "20.3.0",
7474
"prettier": "^2.6.2",
75+
"resolve-url-loader": "^5.0.0",
7576
"sass": "^1.79.3",
7677
"sass-embedded": "^1.79.3",
7778
"sass-loader": "^16.0.2",

Diff for: packages/angular-rspack/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,14 @@
4848
"@nx/angular-rspack-compiler": "workspace:*",
4949
"@nx/devkit": "^20.0.0",
5050
"express": "4.21.1",
51-
"source-map-loader": "^5.0.0",
51+
"css-loader": "^7.1.2",
5252
"jsonc-parser": "^3.3.1",
5353
"less-loader": "^12.2.0",
5454
"license-webpack-plugin": "^4.0.2",
55+
"resolve-url-loader": "^5.0.0",
5556
"sass-embedded": "^1.79.3",
5657
"sass-loader": "^16.0.2",
57-
"css-loader": "^7.1.2",
58+
"source-map-loader": "^5.0.0",
5859
"tslib": "^2.3.0",
5960
"webpack-merge": "^6.0.1",
6061
"ws": "^8.18.0"

Diff for: packages/angular-rspack/src/lib/config/create-config.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
SourceMapDevToolPlugin,
77
RspackPluginInstance,
88
RuleSetRule,
9+
CssExtractRspackPlugin,
910
} from '@rspack/core';
1011
import { merge as rspackMerge } from 'webpack-merge';
1112
import { resolve } from 'path';
@@ -18,7 +19,7 @@ import {
1819
JS_ALL_EXT_REGEX,
1920
TS_ALL_EXT_REGEX,
2021
} from '@nx/angular-rspack-compiler';
21-
import { getStyleLoaders } from './style-config-utils';
22+
import { getStyleLoaders, getStylesEntry } from './style-config-utils';
2223
import { getOutputHashFormat } from './helpers';
2324
import { getProxyConfig } from './dev-server-config-utils';
2425
import { DevToolsIgnorePlugin } from '../plugins/tools/dev-tools-ignore-plugin';
@@ -116,18 +117,12 @@ export async function _createConfig(
116117
configFile: normalizedOptions.tsConfig,
117118
},
118119
},
119-
experiments: {
120-
css: true,
121-
},
122120
module: {
123121
parser: {
124122
javascript: {
125123
requireContext: false,
126124
url: false,
127125
},
128-
'css/auto': {
129-
esModule: true,
130-
},
131126
},
132127
rules: [
133128
...getStyleLoaders(
@@ -169,7 +164,12 @@ export async function _createConfig(
169164
},
170165
],
171166
},
172-
plugins: [...sourceMapPlugins],
167+
plugins: [
168+
...sourceMapPlugins,
169+
new CssExtractRspackPlugin({
170+
filename: `[name]${hashFormat.extract}.css`,
171+
}),
172+
],
173173
};
174174

175175
const configs: Configuration[] = [];
@@ -316,6 +316,9 @@ export async function _createConfig(
316316
main: {
317317
import: [normalizedOptions.browser],
318318
},
319+
styles: {
320+
import: getStylesEntry(normalizedOptions),
321+
},
319322
},
320323
devServer: {
321324
headers: {

Diff for: packages/angular-rspack/src/lib/config/style-config-utils.ts

+54-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { StylePreprocessorOptions } from '@nx/angular-rspack-compiler';
2-
import { SourceMap } from '../models';
2+
import { NormalizedAngularRspackPluginOptions, SourceMap } from '../models';
3+
import { CssExtractRspackPlugin } from '@rspack/core';
34

45
export function getIncludePathOptions(includePaths?: string[]) {
56
if (!includePaths || includePaths.length === 0) {
@@ -20,18 +21,33 @@ export function getSassLoaderConfig(
2021
return {
2122
test: /\.?(sa|sc)ss$/,
2223
use: [
24+
CssExtractRspackPlugin.loader,
25+
{
26+
loader: require.resolve('css-loader'),
27+
options: {
28+
url: false,
29+
sourceMap: sourceMap?.styles,
30+
importLoaders: 1,
31+
},
32+
},
33+
{
34+
loader: require.resolve('resolve-url-loader'),
35+
options: {
36+
sourceMap: sourceMap?.styles,
37+
},
38+
},
2339
{
2440
loader: 'sass-loader',
2541
options: {
2642
api: 'modern-compiler',
2743
sourceMap: sourceMap?.styles,
44+
sourceMapIncludeSources: true,
2845
implementation: require.resolve('sass-embedded'),
2946
...(sassPathOptions ?? []),
3047
...(sassOptions ?? {}),
3148
},
3249
},
3350
],
34-
type: 'css/auto',
3551
};
3652
}
3753

@@ -42,6 +58,15 @@ export function getLessLoaderConfig(
4258
return {
4359
test: /\.less$/,
4460
use: [
61+
CssExtractRspackPlugin.loader,
62+
{
63+
loader: require.resolve('css-loader'),
64+
options: {
65+
url: false,
66+
sourceMap: sourceMap?.styles,
67+
importLoaders: 1,
68+
},
69+
},
4570
{
4671
loader: 'less-loader',
4772
options: {
@@ -51,7 +76,6 @@ export function getLessLoaderConfig(
5176
},
5277
},
5378
],
54-
type: 'css/auto',
5579
};
5680
}
5781

@@ -69,6 +93,20 @@ export function getStyleLoaders(
6993
getIncludePathOptions(stylePreprocessorOptions?.includePaths);
7094

7195
return [
96+
{
97+
test: /\.css$/i,
98+
use: [
99+
CssExtractRspackPlugin.loader,
100+
{
101+
loader: require.resolve('css-loader'),
102+
options: {
103+
url: false,
104+
sourceMap: sourceMap?.styles,
105+
importLoaders: 1,
106+
},
107+
},
108+
],
109+
},
72110
getSassLoaderConfig(
73111
sassPathOptions,
74112
stylePreprocessorOptions?.sass,
@@ -77,3 +115,16 @@ export function getStyleLoaders(
77115
getLessLoaderConfig(lessPathOptions, sourceMap),
78116
];
79117
}
118+
119+
export function getStylesEntry(
120+
options: NormalizedAngularRspackPluginOptions
121+
): string[] {
122+
const styles = options.globalStyles ?? [];
123+
const allStyleEntries: string[] = [];
124+
for (const style of styles) {
125+
for (const file of style.files) {
126+
allStyleEntries.push(file);
127+
}
128+
}
129+
return allStyleEntries;
130+
}

0 commit comments

Comments
 (0)