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.
31 lines
896 B
31 lines
896 B
const less = require('less');
|
|
const { readFileSync } = require('fs');
|
|
const path = require('path');
|
|
const postcss = require('postcss');
|
|
const NpmImportPlugin = require('less-plugin-npm-import');
|
|
const autoprefixer = require('autoprefixer');
|
|
|
|
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: '~' })],
|
|
javascriptEnabled: true,
|
|
};
|
|
return less
|
|
.render(data, lessOpts)
|
|
.then(result => postcss([autoprefixer]).process(result.css, { from: undefined }))
|
|
.then(r => {
|
|
return r.css;
|
|
});
|
|
}
|
|
|
|
module.exports = transformLess;
|