-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodule.js
More file actions
109 lines (94 loc) · 2.41 KB
/
Copy pathmodule.js
File metadata and controls
109 lines (94 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import path from 'path';
import fs from 'fs';
import del from 'del';
import postcss from 'postcss';
import cssNext from 'postcss-cssnext';
import postCssImport from 'postcss-import';
import postCssExtend from 'postcss-extend';
import postCssNesting from 'postcss-nesting';
import cssNano from 'cssnano';
let utils, develop, output, source, trigger, prefixer, clear;
export function init (config, core) {
utils = core.utils;
develop = core.args.env() === 'develop';
// required
output = config.output;
source = config.source;
trigger = config.trigger;
// optional
prefixer = config.autoprefixer_options;
clear = config.clear || false;
clean()
.then (() => {
return build();
})
.then (() => {
let bs = core.globals.get('bs');
if (develop && bs) {
let watch_stuff = core.utils.filterNonExistingFiles (trigger);
if (watch_stuff) {
return bs.watch (trigger)
.on ('change', build)
.on ('unlink', clearOutput);
} else {
core.utils.error ('trigger', trigger);
}
}
});
}
function clean () {
if (clear !== undefined && clear === true) {
del(['*.css'], { cwd: output });
}
return Promise.resolve();
}
function build () {
let stream;
let source_stuff = utils.filterNonExistingFiles (source);
if (source_stuff) {
if (source_stuff.length === 1) {
let source = source_stuff[0];
let source_output = path.join (output, path.posix.basename(source));
fs.readFile(source, (err, contents) => {
postcss([
postCssImport({ addModulesDirectories: [
'node_modules',
path.dirname (source)
]}),
postCssNesting(),
postCssExtend(),
cssNext(prefixer),
cssNano()
])
.process (contents, { to: source_output })
.then(result => {
fs.writeFileSync (source_output, result.css);
return Promise.resolve (result);
})
.then(result => {
// console.log(result);
if (result.map) fs.writeFile (source_output +'.map', result.map);
})
.catch(e => {
utils.error ('cssnext-bundle.build', '');
console.log (e);
});
});
} else {
console.log('we do not support multiple entries for postcss');
}
} else {
utils.error ('trigger', source);
}
return Promise.resolve(stream);
}
function clearOutput (file) {
let name = path.basename(file, '.scss') + '.css';
let stream;
if (path.basename(file) === file) {
stream = del(name, {
cwd: output
});
}
return Promise.resolve(stream);
}