task.plugin('less', {}, function * (file, opts) { opts = Object.assign({ paths:[file.dir] }, opts, { filename:file.base }); const mOpts = opts.sourceMap; // render each file's contents const str = file.data.toString(); const out = yield less.render(str, opts); // rename extensions file.base = file.base.replace(/\.less$/i, '.css'); // `less` will include inline sourcemap if config'd file.data = Buffer.from(out.css); // handle external sourcemaps if (out.map !== void 0 && mOpts !== void 0 && !mOpts.sourceMapFileInline) { const base = mOpts.sourceMapURL || `${file.base}.map`; // add map link comment if (mOpts === true || mOpts.sourceMapURL === void 0) { file.data += Buffer.from(`\n/*# sourceMappingURL=${base}*/`); } // Create new file this._.files.push({ base, dir:file.dir, data:Buffer.from(out.map) }); } });
/* Compile less file */ app.post('/compile', function(req, resp, data) { var input = fs.readFileSync(__dirname + '/public/src/less/style.less', 'utf8'); var options = req.body.data; less.render(input, options, function (err, result) { fs.writeFile(__dirname + '/public/src/css/style.css', result.css, function (err) { if(err) resp.send(err); }); fs.writeFile(__dirname + '/variables.json', JSON.stringify(req.body.data.modifyVars), function (err) { if(err) resp.send(err); }); }); resp.send(''); });
/** * Bundles and output CSS using LESS * @param {String} inputFilePath Path to the source file * @param {String} outputFilePath Output target path * @param {Function} callback */ function bundleLess(inputFilePath, outputFilePath, filesStack, callback) { readFile(inputFilePath, "utf-8").then((data) => { return less.render(data.toString(), lessOptions); }).then((output) => { return writeFile(outputFilePath, output.css, "utf8"); }).then(() => { console.log(`${outputFilePath} has been processed`); filesStack.pop(); // Check if all files are processed if (!filesStack.length && callback) callback(null, true); }).catch((err) => { console.error(`Error occured in ${inputFilePath}`); console.error(err); }); }
const buildCss = async ({inputOptions, outputOptions}) => { await fs.ensureDir(dist_css_directory); const code = fs.readFileSync(path.join(less_directory, `${outputOptions.name}.less`), 'utf8'); const output = await less.render(code, { paths: [less_directory] });