forked from javascript-tutorial/server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompileCss.js
More file actions
executable file
·77 lines (62 loc) · 2.44 KB
/
compileCss.js
File metadata and controls
executable file
·77 lines (62 loc) · 2.44 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
const gulp = require('gulp');
const gp = require('gulp-load-plugins')();
const sourcemaps = require('gulp-sourcemaps');
const fs = require('fs');
const crypto = require('crypto');
const es = require('event-stream');
const path = require('path');
const del = require('del');
module.exports = function(options) {
function getAssetVersion(file) {
if (process.env.NODE_ENV == 'development') {
return fs.statSync(file).mtime.getTime().toString().replace(/0+$/, '').slice(-8);
} else {
var buf = fs.readFileSync(file);
return crypto.createHash('md5').update(buf).digest('hex').substring(0, 8);
}
}
return function() {
var nib = require('nib')();
var asset = require('lib/stylusAsset')({
getVersion: getAssetVersion,
assetVersioning : options.assetVersioning
});
del.sync(options.dst + '/*');
var versions = {};
return gulp.src(options.src)
// without plumber if stylus emits PluginError, it will disappear at the next step
// plumber propagates it down the chain
.pipe(gp.plumber({errorHandler: gp.notify.onError("<%= error.message %>")}))
.pipe(sourcemaps.init())
.pipe(gp.stylus({
use: [nib, asset],
linenos: true,
sourcemap: {
inline: true
}
}))
.pipe(gp.autoprefixer("last 1 version"))
.pipe(sourcemaps.write())
// dies on node 0.11.15 with full npm reinstall
//.pipe(gp.if(process.env.NODE_ENV == 'production', gp.minifyCss()))
.pipe(es.map(function(file, cb) {
var version = crypto.createHash('md5').update(file.contents).digest('hex').substring(0, 8);
var name = path.basename(file.path).slice(0, -4);
if (options.assetVersioning == 'file') {
file.path = file.path.replace(/\.css$/, '.' + version + '.css');
versions[name] = options.publicDst + path.basename(file.path);
} else if (options.assetVersioning == 'query') {
versions[name] = options.publicDst + path.basename(file.path) + '?' + version;
} else {
versions[name] = options.publicDst + path.basename(file.path);
}
//console.log(versions);
cb(null, file);
}))
.pipe(gulp.dest(options.dst))
.on('end', function() {
//console.log(options.manifest, versions);
fs.writeFileSync(options.manifest, JSON.stringify(versions));
});
};
};