Skip to content

Commit 20d425f

Browse files
committed
feat(compiler-sfc): add preprocessCustomRequire option
1 parent d1e6932 commit 20d425f

File tree

2 files changed

+32
-17
lines changed

2 files changed

+32
-17
lines changed

packages/compiler-sfc/src/compileStyle.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// const postcss = require('postcss')
21
import postcss, { ProcessOptions, LazyResult, Result, ResultMap } from 'postcss'
32
import trimPlugin from './stylePluginTrim'
43
import scopedPlugin from './stylePluginScoped'
@@ -19,6 +18,7 @@ export interface SFCStyleCompileOptions {
1918
trim?: boolean
2019
preprocessLang?: PreprocessLang
2120
preprocessOptions?: any
21+
preprocessCustomRequire?: (id: string) => any
2222
postcssOptions?: any
2323
postcssPlugins?: any[]
2424
}
@@ -137,8 +137,13 @@ function preprocess(
137137
options: SFCStyleCompileOptions,
138138
preprocessor: StylePreprocessor
139139
): StylePreprocessorResults {
140-
return preprocessor.render(options.source, options.map, {
141-
filename: options.filename,
142-
...options.preprocessOptions
143-
})
140+
return preprocessor.render(
141+
options.source,
142+
options.map,
143+
{
144+
filename: options.filename,
145+
...options.preprocessOptions
146+
},
147+
options.preprocessCustomRequire
148+
)
144149
}

packages/compiler-sfc/src/stylePreprocessors.ts

+22-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import merge from 'merge-source-map'
22

33
export interface StylePreprocessor {
4-
render(source: string, map?: object, options?: any): StylePreprocessorResults
4+
render(
5+
source: string,
6+
map?: object,
7+
options?: any,
8+
customRequire?: (id: string) => any
9+
): StylePreprocessorResults
510
}
611

712
export interface StylePreprocessorResults {
@@ -12,8 +17,8 @@ export interface StylePreprocessorResults {
1217

1318
// .scss/.sass processor
1419
const scss: StylePreprocessor = {
15-
render(source, map, options) {
16-
const nodeSass = require('sass')
20+
render(source, map, options, load = require) {
21+
const nodeSass = load('sass')
1722
const finalOptions = {
1823
...options,
1924
data: source,
@@ -41,18 +46,23 @@ const scss: StylePreprocessor = {
4146
}
4247

4348
const sass: StylePreprocessor = {
44-
render(source, map, options) {
45-
return scss.render(source, map, {
46-
...options,
47-
indentedSyntax: true
48-
})
49+
render(source, map, options, load) {
50+
return scss.render(
51+
source,
52+
map,
53+
{
54+
...options,
55+
indentedSyntax: true
56+
},
57+
load
58+
)
4959
}
5060
}
5161

5262
// .less
5363
const less: StylePreprocessor = {
54-
render(source, map, options) {
55-
const nodeLess = require('less')
64+
render(source, map, options, load = require) {
65+
const nodeLess = load('less')
5666

5767
let result: any
5868
let error: Error | null = null
@@ -81,8 +91,8 @@ const less: StylePreprocessor = {
8191

8292
// .styl
8393
const styl: StylePreprocessor = {
84-
render(source, map, options) {
85-
const nodeStylus = require('stylus')
94+
render(source, map, options, load = require) {
95+
const nodeStylus = load('stylus')
8696
try {
8797
const ref = nodeStylus(source)
8898
Object.keys(options).forEach(key => ref.set(key, options[key]))

0 commit comments

Comments
 (0)