Skip to content

Commit d21635f

Browse files
committed
feat(build): broccoli sass plugin
1 parent b2dbad8 commit d21635f

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

lib/broccoli/broccoli-sass.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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('node-sass');
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 sass = require('node-sass');
14+
15+
class SASSPlugin extends Plugin {
16+
constructor(inputNodes, options) {
17+
super(inputNodes, {});
18+
19+
options = options || {};
20+
Plugin.call(this, inputNodes, {
21+
cacheInclude: [/(.*?).scss$/, /(.*?).sass$/]
22+
});
23+
this.options = options;
24+
this.fileRegistry = [];
25+
}
26+
27+
build() {
28+
let entries = this.listEntries();
29+
let rootFileNames = entries.map(e => {
30+
return path.resolve(e.basePath, e.relativePath);
31+
});
32+
33+
rootFileNames.forEach(fileName => {
34+
this.compile(fileName, this.inputPaths[0], this.outputPath);
35+
});
36+
}
37+
38+
compile(fileName, inputPath, outputPath) {
39+
let sassOptions = {
40+
file: path.join(fileName),
41+
includePaths: this.inputPaths
42+
};
43+
44+
let result = sass.renderSync(sassOptions);
45+
let filePath = fileName.replace(inputPath, outputPath)
46+
.replace(/\.scss$/, '.css')
47+
.replace(/\.sass$/, '.css');
48+
49+
fse.outputFileSync(filePath, result.css, 'utf8');
50+
}
51+
}
52+
53+
module.exports = SASSPlugin;
54+
}
55+
catch (e) {
56+
module.exports = null;
57+
}

0 commit comments

Comments
 (0)