-// const postcss = require('postcss')
import postcss, { ProcessOptions, LazyResult, Result, ResultMap } from 'postcss'
import trimPlugin from './stylePluginTrim'
import scopedPlugin from './stylePluginScoped'
trim?: boolean
preprocessLang?: PreprocessLang
preprocessOptions?: any
+ preprocessCustomRequire?: (id: string) => any
postcssOptions?: any
postcssPlugins?: any[]
}
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
+ )
}
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 {
// .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,
}
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
// .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]))