From 68de7cbd33a942168d2a74c244ba1c4300c6d31b Mon Sep 17 00:00:00 2001
From: stygian-desolator <73412177+stygian-desolator@users.noreply.github.com>
Date: Sun, 26 Dec 2021 15:54:08 +0800
Subject: [PATCH 1/3] feat: support importing css with ?raw
---
packages/playground/assets/__tests__/assets.spec.ts | 10 ++++++++++
packages/playground/assets/index.html | 6 ++++++
packages/playground/css/__tests__/css.spec.ts | 8 ++++++++
packages/playground/css/index.html | 3 +++
packages/playground/css/main.js | 3 +++
packages/playground/css/raw-imported.css | 3 +++
packages/vite/src/node/plugins/css.ts | 10 +++++++---
7 files changed, 40 insertions(+), 3 deletions(-)
create mode 100644 packages/playground/css/raw-imported.css
diff --git a/packages/playground/assets/__tests__/assets.spec.ts b/packages/playground/assets/__tests__/assets.spec.ts
index c51bb4094b7b8c..8c66588d50716d 100644
--- a/packages/playground/assets/__tests__/assets.spec.ts
+++ b/packages/playground/assets/__tests__/assets.spec.ts
@@ -189,6 +189,16 @@ test('?url import', async () => {
)
})
+test('?url import on css', async () => {
+ const src = readFile('css/icons.css')
+ const txt = await page.textContent('.url-css')
+ expect(txt).toEqual(
+ isBuild
+ ? `data:text/css;base64,${Buffer.from(src).toString('base64')}`
+ : '/foo/css/icons.css'
+ )
+})
+
describe('unicode url', () => {
test('from js import', async () => {
const src = readFile('テスト-測試-white space.js')
diff --git a/packages/playground/assets/index.html b/packages/playground/assets/index.html
index f3b9a0b372a608..66753240c8a54e 100644
--- a/packages/playground/assets/index.html
+++ b/packages/playground/assets/index.html
@@ -133,6 +133,9 @@
?raw import
?url import
+?url import with css
+
+
new URL('...', import.meta.url)
@@ -211,6 +214,9 @@ @import
import unicodeUrl from './テスト-測試-white space.js?url'
text('.unicode-url', unicodeUrl)
+ import cssUrl from './css/icons.css?url'
+ text('.url-css', cssUrl)
+
// const url = new URL('non_existent_file.png', import.meta.url)
const metaUrl = new URL('./nested/asset.png', import.meta.url)
text('.import-meta-url', metaUrl)
diff --git a/packages/playground/css/__tests__/css.spec.ts b/packages/playground/css/__tests__/css.spec.ts
index f1eb66e097ad86..bc2cbfe6a1b57a 100644
--- a/packages/playground/css/__tests__/css.spec.ts
+++ b/packages/playground/css/__tests__/css.spec.ts
@@ -356,3 +356,11 @@ test('minify css', async () => {
expect(cssFile).toMatch('rgba(')
expect(cssFile).not.toMatch('#ffff00b3')
})
+
+test('?raw', async () => {
+ const rawImportCss = await page.$('.raw-imported-css')
+
+ expect(await rawImportCss.textContent()).toBe(
+ require('fs').readFileSync(require.resolve('../raw-imported.css'), 'utf-8')
+ )
+})
diff --git a/packages/playground/css/index.html b/packages/playground/css/index.html
index 7a79bb1629f989..427bbc437866a5 100644
--- a/packages/playground/css/index.html
+++ b/packages/playground/css/index.html
@@ -104,6 +104,9 @@ CSS
Inlined import - this should NOT be red.
+
+ Raw Support
+
diff --git a/packages/playground/css/main.js b/packages/playground/css/main.js
index 24a278c8687940..df3563a9d73906 100644
--- a/packages/playground/css/main.js
+++ b/packages/playground/css/main.js
@@ -12,6 +12,9 @@ text('.imported-less', less)
import stylus from './stylus.styl'
text('.imported-stylus', stylus)
+import rawCss from './raw-imported.css?raw'
+text('.raw-imported-css', rawCss)
+
import mod from './mod.module.css'
document.querySelector('.modules').classList.add(mod['apply-color'])
text('.modules-code', JSON.stringify(mod, null, 2))
diff --git a/packages/playground/css/raw-imported.css b/packages/playground/css/raw-imported.css
new file mode 100644
index 00000000000000..ac0aee96390c33
--- /dev/null
+++ b/packages/playground/css/raw-imported.css
@@ -0,0 +1,3 @@
+.raw-imported {
+ color: yellow;
+}
diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts
index 280a4ed177983d..2a14dc638fc4ed 100644
--- a/packages/vite/src/node/plugins/css.ts
+++ b/packages/vite/src/node/plugins/css.ts
@@ -25,7 +25,7 @@ import type {
} from 'rollup'
import { dataToEsm } from '@rollup/pluginutils'
import colors from 'picocolors'
-import { CLIENT_PUBLIC_PATH } from '../constants'
+import { CLIENT_PUBLIC_PATH, SPECIAL_QUERY_RE } from '../constants'
import type { ResolveFn, ViteDevServer } from '../'
import {
getAssetFilename,
@@ -165,7 +165,7 @@ export function cssPlugin(config: ResolvedConfig): Plugin {
},
async transform(raw, id, options) {
- if (!isCSSRequest(id) || commonjsProxyRE.test(id)) {
+ if (!isCSSRequest(id) || commonjsProxyRE.test(id) || SPECIAL_QUERY_RE.test(id)) {
return
}
const ssr = options?.ssr === true
@@ -282,7 +282,11 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
},
async transform(css, id, options) {
- if (!isCSSRequest(id) || commonjsProxyRE.test(id)) {
+ if (
+ !isCSSRequest(id) ||
+ commonjsProxyRE.test(id) ||
+ SPECIAL_QUERY_RE.test(id)
+ ) {
return
}
From a88234c56dfe50a61a1d8d534b886bc83b7f836a Mon Sep 17 00:00:00 2001
From: stygian-desolator <73412177+stygian-desolator@users.noreply.github.com>
Date: Tue, 15 Feb 2022 08:51:12 +0800
Subject: [PATCH 2/3] fix: fix lint error
---
packages/vite/src/node/plugins/css.ts | 47 +++++++++++++--------------
1 file changed, 23 insertions(+), 24 deletions(-)
diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts
index 2a14dc638fc4ed..59a0bd80a0b687 100644
--- a/packages/vite/src/node/plugins/css.ts
+++ b/packages/vite/src/node/plugins/css.ts
@@ -55,10 +55,10 @@ export interface CSSOptions {
modules?: CSSModulesOptions | false
preprocessorOptions?: Record
postcss?:
- | string
- | (Postcss.ProcessOptions & {
- plugins?: Postcss.Plugin[]
- })
+ | string
+ | (Postcss.ProcessOptions & {
+ plugins?: Postcss.Plugin[]
+ })
}
export interface CSSModulesOptions {
@@ -70,18 +70,18 @@ export interface CSSModulesOptions {
scopeBehaviour?: 'global' | 'local'
globalModulePaths?: RegExp[]
generateScopedName?:
- | string
- | ((name: string, filename: string, css: string) => string)
+ | string
+ | ((name: string, filename: string, css: string) => string)
hashPrefix?: string
/**
* default: null
*/
localsConvention?:
- | 'camelCase'
- | 'camelCaseOnly'
- | 'dashes'
- | 'dashesOnly'
- | null
+ | 'camelCase'
+ | 'camelCaseOnly'
+ | 'dashes'
+ | 'dashesOnly'
+ | null
}
const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)`
@@ -221,14 +221,14 @@ export function cssPlugin(config: ResolvedConfig): Plugin {
isCSSRequest(file)
? moduleGraph.createFileOnlyEntry(file)
: await moduleGraph.ensureEntryFromUrl(
- (
- await fileToUrl(file, config, this)
- ).replace(
- (config.server?.origin ?? '') + config.base,
- '/'
- ),
- ssr
- )
+ (
+ await fileToUrl(file, config, this)
+ ).replace(
+ (config.server?.origin ?? '') + config.base,
+ '/'
+ ),
+ ssr
+ )
)
}
moduleGraph.updateModuleInfo(
@@ -314,9 +314,8 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
`const __vite__css = ${JSON.stringify(css)}`,
`__vite__updateStyle(__vite__id, __vite__css)`,
// css modules exports change on edit so it can't self accept
- `${
- modulesCode ||
- `import.meta.hot.accept()\nexport default __vite__css`
+ `${modulesCode ||
+ `import.meta.hot.accept()\nexport default __vite__css`
}`,
`import.meta.hot.prune(() => __vite__removeStyle(__vite__id))`
].join('\n')
@@ -347,8 +346,8 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
modulesCode ||
(usedRE.test(id)
? `export default ${JSON.stringify(
- inlined ? await minifyCSS(css, config) : css
- )}`
+ inlined ? await minifyCSS(css, config) : css
+ )}`
: `export default ''`),
map: { mappings: '' },
// avoid the css module from being tree-shaken so that we can retrieve
From a60c2912aeec248a2b1568402c224ef1fa26bcf3 Mon Sep 17 00:00:00 2001
From: stygian-desolator <73412177+stygian-desolator@users.noreply.github.com>
Date: Tue, 15 Feb 2022 09:19:58 +0800
Subject: [PATCH 3/3] fix: fix lint error
---
packages/vite/src/node/plugins/css.ts | 53 +++++++++++++++------------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts
index 59a0bd80a0b687..698d07e9def025 100644
--- a/packages/vite/src/node/plugins/css.ts
+++ b/packages/vite/src/node/plugins/css.ts
@@ -55,10 +55,10 @@ export interface CSSOptions {
modules?: CSSModulesOptions | false
preprocessorOptions?: Record
postcss?:
- | string
- | (Postcss.ProcessOptions & {
- plugins?: Postcss.Plugin[]
- })
+ | string
+ | (Postcss.ProcessOptions & {
+ plugins?: Postcss.Plugin[]
+ })
}
export interface CSSModulesOptions {
@@ -70,18 +70,18 @@ export interface CSSModulesOptions {
scopeBehaviour?: 'global' | 'local'
globalModulePaths?: RegExp[]
generateScopedName?:
- | string
- | ((name: string, filename: string, css: string) => string)
+ | string
+ | ((name: string, filename: string, css: string) => string)
hashPrefix?: string
/**
* default: null
*/
localsConvention?:
- | 'camelCase'
- | 'camelCaseOnly'
- | 'dashes'
- | 'dashesOnly'
- | null
+ | 'camelCase'
+ | 'camelCaseOnly'
+ | 'dashes'
+ | 'dashesOnly'
+ | null
}
const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)`
@@ -165,7 +165,11 @@ export function cssPlugin(config: ResolvedConfig): Plugin {
},
async transform(raw, id, options) {
- if (!isCSSRequest(id) || commonjsProxyRE.test(id) || SPECIAL_QUERY_RE.test(id)) {
+ if (
+ !isCSSRequest(id) ||
+ commonjsProxyRE.test(id) ||
+ SPECIAL_QUERY_RE.test(id)
+ ) {
return
}
const ssr = options?.ssr === true
@@ -221,14 +225,14 @@ export function cssPlugin(config: ResolvedConfig): Plugin {
isCSSRequest(file)
? moduleGraph.createFileOnlyEntry(file)
: await moduleGraph.ensureEntryFromUrl(
- (
- await fileToUrl(file, config, this)
- ).replace(
- (config.server?.origin ?? '') + config.base,
- '/'
- ),
- ssr
- )
+ (
+ await fileToUrl(file, config, this)
+ ).replace(
+ (config.server?.origin ?? '') + config.base,
+ '/'
+ ),
+ ssr
+ )
)
}
moduleGraph.updateModuleInfo(
@@ -314,8 +318,9 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
`const __vite__css = ${JSON.stringify(css)}`,
`__vite__updateStyle(__vite__id, __vite__css)`,
// css modules exports change on edit so it can't self accept
- `${modulesCode ||
- `import.meta.hot.accept()\nexport default __vite__css`
+ `${
+ modulesCode ||
+ `import.meta.hot.accept()\nexport default __vite__css`
}`,
`import.meta.hot.prune(() => __vite__removeStyle(__vite__id))`
].join('\n')
@@ -346,8 +351,8 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
modulesCode ||
(usedRE.test(id)
? `export default ${JSON.stringify(
- inlined ? await minifyCSS(css, config) : css
- )}`
+ inlined ? await minifyCSS(css, config) : css
+ )}`
: `export default ''`),
map: { mappings: '' },
// avoid the css module from being tree-shaken so that we can retrieve