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: '~' })], javascriptEnabled: true, }; return less .render(data, lessOpts) .then(result => { const source = result.css; return postcss(postcssConfig.plugins).process(source, { from: undefined }); }) .then(r => { return r.css; }); } module.exports = transformLess;