Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9de36af

Browse files
committedMay 24, 2023
feat: add experimental css support
1 parent fa3d50e commit 9de36af

File tree

4 files changed

+26
-36
lines changed

4 files changed

+26
-36
lines changed
 

‎src/descriptorCache.ts

+1-23
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as fs from 'fs'
2-
import type { SFCDescriptor, SFCParseResult } from 'vue/compiler-sfc'
2+
import type { SFCDescriptor } from 'vue/compiler-sfc'
33
import { compiler } from './compiler'
44

55
const { parse } = compiler
@@ -9,28 +9,6 @@ export function setDescriptor(filename: string, entry: SFCDescriptor) {
99
descriptorCache.set(cleanQuery(filename), entry)
1010
}
1111

12-
export function cachedParse(
13-
filename: string,
14-
source: string,
15-
sourceMap = true
16-
): SFCParseResult {
17-
filename = cleanQuery(filename)
18-
if (descriptorCache.has(filename)) {
19-
// Should we also cache errors here?
20-
return { descriptor: descriptorCache.get(filename)!, errors: [] }
21-
}
22-
23-
const { descriptor, errors } = parse(source, {
24-
filename,
25-
sourceMap,
26-
})
27-
descriptorCache.set(filename, descriptor)
28-
return {
29-
descriptor,
30-
errors,
31-
}
32-
}
33-
3412
export function getDescriptor(filename: string): SFCDescriptor {
3513
filename = cleanQuery(filename)
3614
if (descriptorCache.has(filename)) {

‎src/index.ts

+11-11
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import * as qs from 'querystring'
44

55
import hash = require('hash-sum')
66

7-
// import { compiler } from './compiler'
7+
import { compiler } from './compiler'
88
import type {
99
TemplateCompiler,
1010
CompilerOptions,
1111
SFCBlock,
1212
SFCTemplateCompileOptions,
1313
SFCScriptCompileOptions,
14-
// SFCParseResult,
1514
} from 'vue/compiler-sfc'
1615
import { selectBlock } from './select'
1716
import { genHotReloadCode } from './hotReload'
@@ -20,11 +19,7 @@ import { formatError } from './formatError'
2019

2120
import VueLoaderPlugin from './plugin'
2221
import { canInlineTemplate } from './resolveScript'
23-
import {
24-
cachedParse,
25-
// getDescriptor,
26-
setDescriptor,
27-
} from './descriptorCache'
22+
import { setDescriptor } from './descriptorCache'
2823
import { getOptions, stringifyRequest as _stringifyRequest } from './util'
2924

3025
export { VueLoaderPlugin }
@@ -62,7 +57,7 @@ export interface VueLoaderOptions {
6257

6358
let errorEmitted = false
6459

65-
// const { parse } = compiler
60+
const { parse } = compiler
6661
const exportHelperPath = JSON.stringify(require.resolve('./exportHelper'))
6762
// const vueLoader = __filename
6863

@@ -113,8 +108,10 @@ export default function loader(
113108

114109
const filename = resourcePath.replace(/\?.*$/, '')
115110

116-
// Parse if necessary
117-
const { descriptor, errors } = cachedParse(filename, source, sourceMap)
111+
const { descriptor, errors } = parse(source, {
112+
filename,
113+
sourceMap,
114+
})
118115

119116
const asCustomElement =
120117
typeof options.customElement === 'boolean'
@@ -408,7 +405,10 @@ function genMatchResource(
408405

409406
// process non-external resources
410407
if ('vue' in parsedQuery && !('external' in parsedQuery)) {
411-
loaders.push(context.loaders[context.loaderIndex].request)
408+
const currentRequest = context.loaders
409+
.slice(context.loaderIndex)
410+
.map((obj) => obj.request)
411+
loaders.push(...currentRequest)
412412
}
413413
const loaderString = loaders.join('!')
414414

‎src/pitcher.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,19 @@ export const pitch = function () {
6262
const isWebpack5 = webpackVersion && webpackVersion[0] > '4'
6363
if (query.type === `style`) {
6464
if (isWebpack5 && context._compiler?.options.experiments.css) {
65-
return `@import "${context.resource}";`
65+
if (query.inline) {
66+
context.emitError(
67+
new Error('`inline` is not supported with `experiments.css` enabled')
68+
)
69+
return ''
70+
}
71+
72+
const loaderString = [stylePostLoaderPath, ...loaders]
73+
.map((loader) => {
74+
return typeof loader === 'string' ? loader : loader.request
75+
})
76+
.join('!')
77+
return `@import "-!${loaderString}!${context.resource}";`
6678
}
6779
const cssLoaderIndex = loaders.findIndex(isCSSLoader)
6880
if (cssLoaderIndex > -1) {

‎tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"baseUrl": ".",
44
"outDir": "dist",
5-
"sourceMap": false,
5+
"sourceMap": true,
66
"target": "es2015",
77
"module": "commonjs",
88
"moduleResolution": "node",

0 commit comments

Comments
 (0)
Please sign in to comment.