12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- var path = require('path');
- var accord = require('accord');
- var through2 = require('through2');
- var replaceExt = require('replace-ext');
- var assign = require('object-assign');
- var applySourceMap = require('vinyl-sourcemaps-apply');
- var PluginError = require('plugin-error');
- var less = accord.load('less');
- module.exports = function (options) {
- // Mixes in default options.
- var opts = assign({}, {
- compress: false,
- paths: []
- }, options);
- return through2.obj(function(file, enc, cb) {
- if (file.isNull()) {
- return cb(null, file);
- }
- if (file.isStream()) {
- return cb(new PluginError('gulp-less', 'Streaming not supported'));
- }
- var str = file.contents.toString();
- // Injects the path of the current file
- opts.filename = file.path;
- // Bootstrap source maps
- if (file.sourceMap) {
- opts.sourcemap = true;
- }
- less.render(str, opts).then(function(res) {
- file.contents = new Buffer(res.result);
- file.path = replaceExt(file.path, '.css');
- if (res.sourcemap) {
- res.sourcemap.file = file.relative;
- res.sourcemap.sources = res.sourcemap.sources.map(function (source) {
- return path.relative(file.base, source);
- });
- applySourceMap(file, res.sourcemap);
- }
- return file;
- }).then(function(file) {
- cb(null, file);
- }).catch(function(err) {
- // Convert the keys so PluginError can read them
- err.lineNumber = err.line;
- err.fileName = err.filename;
- // Add a better error message
- err.message = err.message + ' in file ' + err.fileName + ' line no. ' + err.lineNumber;
- return cb(new PluginError('gulp-less', err));
- });
- });
- };
|