diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index c088bbb4f7963a..40c6ff6aa6e159 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -2776,6 +2776,7 @@ const makeLessWorker = ( filename: string, dir: string, rootFile: string, + mime: string | undefined, ) => { const resolved = await resolvers.less( environment, @@ -2784,6 +2785,12 @@ const makeLessWorker = ( ) if (!resolved) return undefined + // don't rebase URLs in JavaScript plugins + if (mime === 'application/javascript') { + const file = path.resolve(resolved) // ensure os-specific flashes + return { resolved: file } + } + const result = await rebaseUrls( environment, resolved, @@ -2829,7 +2836,12 @@ const makeLessWorker = ( opts: any, env: any, ): Promise { - const result = await viteLessResolve(filename, dir, this.rootFile) + const result = await viteLessResolve( + filename, + dir, + this.rootFile, + opts.mime, + ) if (result) { return { filename: path.resolve(result.resolved), diff --git a/playground/css/__tests__/css.spec.ts b/playground/css/__tests__/css.spec.ts index 42f50aa92ce2df..efade337fa1ad1 100644 --- a/playground/css/__tests__/css.spec.ts +++ b/playground/css/__tests__/css.spec.ts @@ -108,6 +108,13 @@ test('less', async () => { await untilUpdated(() => getColor(atImport), 'blue') }) +test('less-plugin', async () => { + const body = await page.$('body') + expect(await getBg(body)).toBe( + 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wIAAgEBAFPIhPsAAAAASUVORK5CYII=")', + ) +}) + test('stylus', async () => { const imported = await page.$('.stylus') const additionalData = await page.$('.stylus-additional-data') diff --git a/playground/css/less-plugin.less b/playground/css/less-plugin.less new file mode 100644 index 00000000000000..6959641d6b104c --- /dev/null +++ b/playground/css/less-plugin.less @@ -0,0 +1,5 @@ +@plugin "less-plugin/test.js"; + +body { + background-image: test(); +} diff --git a/playground/css/less-plugin/test.js b/playground/css/less-plugin/test.js new file mode 100644 index 00000000000000..ae22b8ca703b5a --- /dev/null +++ b/playground/css/less-plugin/test.js @@ -0,0 +1,5 @@ +functions.add('test', function test() { + const transparentPng = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wIAAgEBAFPIhPsAAAAASUVORK5CYII=' + return `url(${transparentPng})` +}) diff --git a/playground/css/main.js b/playground/css/main.js index 97fa123e37ef5d..41140a5de5315c 100644 --- a/playground/css/main.js +++ b/playground/css/main.js @@ -3,6 +3,7 @@ import './imported.css' import './sugarss.sss' import './sass.scss' import './less.less' +import './less-plugin.less' import './stylus.styl' import './manual-chunk.css'