You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
905 B
34 lines
905 B
7 years ago
|
const less = require('less')
|
||
|
const { readFileSync } = require('fs')
|
||
|
const path = require('path')
|
||
|
const postcss = require('postcss')
|
||
|
const NpmImportPlugin = require('less-plugin-npm-import')
|
||
|
const postcssConfig = require('./postcssConfig')
|
||
|
|
||
|
function transformLess (lessFile, config = {}) {
|
||
|
const { cwd = process.cwd() } = config
|
||
|
const resolvedLessFile = path.resolve(cwd, lessFile)
|
||
|
|
||
|
let data = readFileSync(resolvedLessFile, 'utf-8')
|
||
|
data = data.replace(/^\uFEFF/, '')
|
||
|
|
||
|
// Do less compile
|
||
|
const lessOpts = {
|
||
|
paths: [path.dirname(resolvedLessFile)],
|
||
|
filename: resolvedLessFile,
|
||
|
plugins: [
|
||
|
new NpmImportPlugin({ prefix: '~' }),
|
||
|
],
|
||
|
}
|
||
|
return less.render(data, lessOpts)
|
||
|
.then((result) => {
|
||
|
const source = result.css
|
||
|
return postcss(postcssConfig.plugins).process(source)
|
||
|
})
|
||
|
.then((r) => {
|
||
|
return r.css
|
||
|
})
|
||
|
}
|
||
|
|
||
|
module.exports = transformLess
|