From 20d425fb19e04cd5b66f76b0f52ca221c92eb74c Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 24 Apr 2020 09:27:51 -0400 Subject: [PATCH] feat(compiler-sfc): add preprocessCustomRequire option --- packages/compiler-sfc/src/compileStyle.ts | 15 +++++--- .../compiler-sfc/src/stylePreprocessors.ts | 34 ++++++++++++------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/packages/compiler-sfc/src/compileStyle.ts b/packages/compiler-sfc/src/compileStyle.ts index 129c8ca3..a5c51331 100644 --- a/packages/compiler-sfc/src/compileStyle.ts +++ b/packages/compiler-sfc/src/compileStyle.ts @@ -1,4 +1,3 @@ -// const postcss = require('postcss') import postcss, { ProcessOptions, LazyResult, Result, ResultMap } from 'postcss' import trimPlugin from './stylePluginTrim' import scopedPlugin from './stylePluginScoped' @@ -19,6 +18,7 @@ export interface SFCStyleCompileOptions { trim?: boolean preprocessLang?: PreprocessLang preprocessOptions?: any + preprocessCustomRequire?: (id: string) => any postcssOptions?: any postcssPlugins?: any[] } @@ -137,8 +137,13 @@ function preprocess( options: SFCStyleCompileOptions, preprocessor: StylePreprocessor ): StylePreprocessorResults { - return preprocessor.render(options.source, options.map, { - filename: options.filename, - ...options.preprocessOptions - }) + return preprocessor.render( + options.source, + options.map, + { + filename: options.filename, + ...options.preprocessOptions + }, + options.preprocessCustomRequire + ) } diff --git a/packages/compiler-sfc/src/stylePreprocessors.ts b/packages/compiler-sfc/src/stylePreprocessors.ts index b29f0279..c52910d7 100644 --- a/packages/compiler-sfc/src/stylePreprocessors.ts +++ b/packages/compiler-sfc/src/stylePreprocessors.ts @@ -1,7 +1,12 @@ import merge from 'merge-source-map' export interface StylePreprocessor { - render(source: string, map?: object, options?: any): StylePreprocessorResults + render( + source: string, + map?: object, + options?: any, + customRequire?: (id: string) => any + ): StylePreprocessorResults } export interface StylePreprocessorResults { @@ -12,8 +17,8 @@ export interface StylePreprocessorResults { // .scss/.sass processor const scss: StylePreprocessor = { - render(source, map, options) { - const nodeSass = require('sass') + render(source, map, options, load = require) { + const nodeSass = load('sass') const finalOptions = { ...options, data: source, @@ -41,18 +46,23 @@ const scss: StylePreprocessor = { } const sass: StylePreprocessor = { - render(source, map, options) { - return scss.render(source, map, { - ...options, - indentedSyntax: true - }) + render(source, map, options, load) { + return scss.render( + source, + map, + { + ...options, + indentedSyntax: true + }, + load + ) } } // .less const less: StylePreprocessor = { - render(source, map, options) { - const nodeLess = require('less') + render(source, map, options, load = require) { + const nodeLess = load('less') let result: any let error: Error | null = null @@ -81,8 +91,8 @@ const less: StylePreprocessor = { // .styl const styl: StylePreprocessor = { - render(source, map, options) { - const nodeStylus = require('stylus') + render(source, map, options, load = require) { + const nodeStylus = load('stylus') try { const ref = nodeStylus(source) Object.keys(options).forEach(key => ref.set(key, options[key]))