Skip to content

Commit ef3334f

Browse files
committed
feat(build): broccoli less plugin
1 parent d21635f commit ef3334f

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

lib/broccoli/broccoli-less.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/* jshint node: true, esversion: 6 */
2+
'use strict';
3+
4+
try {
5+
process.env.NODE_PATH += `:${process.env.PWD}/node_modules`;
6+
require('module').Module._initPaths();
7+
require.resolve('less');
8+
9+
const Plugin = require('broccoli-caching-writer');
10+
const fs = require('fs');
11+
const fse = require('fs-extra');
12+
const path = require('path');
13+
const less = require('less');
14+
15+
class LESSPlugin extends Plugin {
16+
constructor(inputNodes, options) {
17+
super(inputNodes, {});
18+
19+
options = options || {};
20+
Plugin.call(this, inputNodes, {
21+
cacheInclude: [/(.*?).less$/]
22+
});
23+
this.options = options;
24+
this.fileRegistry = [];
25+
}
26+
27+
build() {
28+
const that = this;
29+
let entries = this.listEntries();
30+
let rootFileNames = entries.map(e => {
31+
return path.resolve(e.basePath, e.relativePath);
32+
});
33+
34+
let promises = [];
35+
36+
rootFileNames.forEach(fileName => {
37+
let p = new Promise(resolve => {
38+
that.compile(fileName, that.inputPaths[0], that.outputPath)
39+
.then(() => {
40+
resolve();
41+
});
42+
});
43+
44+
promises.push(p);
45+
});
46+
47+
return Promise.all(promises);
48+
}
49+
50+
compile(fileName, inputPath, outputPath) {
51+
return new Promise(resolve => {
52+
let content = fs.readFileSync(fileName, 'utf8');
53+
54+
less.render(content)
55+
.then(output => {
56+
let filePath = fileName.replace(inputPath, outputPath).replace(/\.less$/, '.css');
57+
fse.outputFileSync(filePath, output.css, 'utf8');
58+
resolve();
59+
});
60+
});
61+
}
62+
}
63+
64+
module.exports = LESSPlugin;
65+
} catch (e) {
66+
module.exports = null;
67+
}

0 commit comments

Comments
 (0)