Skip to content

Commit bc19ddd

Browse files
feat: improve url() resolving algorithm
1 parent d139ec1 commit bc19ddd

13 files changed

+456
-206
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ Thumbs.db
1717
*.sublime-project
1818
*.sublime-workspace
1919
/test/fixtures/import/import-absolute.css
20+
/test/fixtures/url/url-absolute.css

README.md

+34-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ Type: `Boolean|Function`
125125
Default: `true`
126126

127127
Enables/Disables `url`/`image-set` functions handling.
128-
Control `url()` resolving. Absolute URLs and root-relative URLs are not resolving.
128+
Control `url()` resolving. Absolute URLs are not resolving.
129129

130130
Examples resolutions:
131131

@@ -1174,6 +1174,39 @@ module.exports = {
11741174
};
11751175
```
11761176

1177+
### Resolve unresolved URLs using an alias
1178+
1179+
**index.css**
1180+
1181+
```css
1182+
.class {
1183+
background: url(/assets/unresolved/img.png);
1184+
}
1185+
```
1186+
1187+
**webpack.config.js**
1188+
1189+
```js
1190+
module.exports = {
1191+
module: {
1192+
rules: [
1193+
{
1194+
test: /\.css$/i,
1195+
use: ['style-loader', 'css-loader'],
1196+
},
1197+
],
1198+
},
1199+
resolve: {
1200+
alias: {
1201+
'/assets/unresolved/img.png': path.resolve(
1202+
__dirname,
1203+
'assets/real-path-to-img/img.png'
1204+
),
1205+
},
1206+
},
1207+
};
1208+
```
1209+
11771210
## Contributing
11781211

11791212
Please take a moment to read our contributing guidelines if you haven't yet done so.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"dist"
4141
],
4242
"peerDependencies": {
43-
"webpack": "^4.0.0 || ^5.0.0"
43+
"webpack": "^4.27.0 || ^5.0.0"
4444
},
4545
"dependencies": {
4646
"camelcase": "^6.0.0",

src/index.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
import { getOptions, isUrlRequest, stringifyRequest } from 'loader-utils';
5+
import { getOptions, stringifyRequest } from 'loader-utils';
66
import postcss from 'postcss';
77
import postcssPkg from 'postcss/package.json';
88
import validateOptions from 'schema-utils';
@@ -22,6 +22,7 @@ import {
2222
getModulesPlugins,
2323
normalizeSourceMap,
2424
shouldUseModulesPlugins,
25+
isUrlRequestable,
2526
} from './utils';
2627

2728
export default function loader(content, map, meta) {
@@ -95,11 +96,19 @@ export default function loader(content, map, meta) {
9596
}
9697

9798
if (options.url !== false && exportType === 'full') {
99+
const urlResolver = this.getResolve({
100+
mainFields: ['asset'],
101+
conditionNames: ['asset'],
102+
});
103+
98104
plugins.push(
99105
urlParser({
106+
context: this.context,
107+
rootContext: this.rootContext,
100108
filter: getFilter(options.url, this.resourcePath, (value) =>
101-
isUrlRequest(value)
109+
isUrlRequestable(value)
102110
),
111+
resolver: urlResolver,
103112
urlHandler: (url) => stringifyRequest(this, url),
104113
})
105114
);

0 commit comments

Comments
 (0)