forked from TechDocs/TechDocs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.coffee
105 lines (96 loc) · 2.73 KB
/
gulpfile.coffee
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
gulp = require 'gulp'
streamify = require 'gulp-streamify'
uglify = require 'gulp-uglify'
sketch = require 'gulp-sketch'
cssimport = require 'gulp-cssimport'
autoprefixer = require 'gulp-autoprefixer'
minifyCss = require 'gulp-minify-css'
sourcemaps = require 'gulp-sourcemaps'
browserify = require 'browserify'
riotify = require 'riotify'
source = require 'vinyl-source-stream'
buffer = require 'vinyl-buffer'
runSequence = require 'run-sequence'
fs = require 'fs'
path = require 'path'
browserSync = require 'browser-sync'
reload = browserSync.reload
$ =
dist: './'
images: './images/'
js: './src/js/**/*.js'
app: './src/js/app.js'
css: './src/css/**/*.css'
style: './src/css/style.css'
sitefiles: './sitefiles/*.json'
components: './src/components/*.tag'
logo: './src/images/logo.sketch'
og: './src/images/og.sketch'
watch: ['*.html', '*.js', '*.css']
sorter = (col, desc = false) ->
sign = if desc then -1 else 1
(a, b) ->
return sign * 1 if a[col] > b[col]
return sign * (-1) if a[col] < b[col]
0
gulp.task 'default', (cb) -> runSequence 'create-index', [
'browserify'
'logo'
'og'
'css'
], cb
gulp.task 'create-index', (cb) ->
fs.readdir './sitefiles', (err, files) ->
index = []
for file in files when /\.json$/.test file
sitefile = require "./sitefiles/#{file}"
index.push
id: sitefile.id
title: sitefile.title
url: sitefile.url
language: sitefile.language
origin: sitefile.origin or ''
data = JSON.stringify index.sort sorter 'id'
fs.writeFile 'index.json', data, -> cb()
gulp.task 'browserify', ->
browserify
entries: [$.app]
debug: true
.transform riotify
.bundle()
.pipe source path.basename $.app
.pipe buffer()
.pipe sourcemaps.init loadMaps: true
.pipe streamify uglify()
.pipe sourcemaps.write './'
.pipe gulp.dest $.dist
gulp.task 'logo', ->
gulp.src $.logo
.pipe sketch
export: 'artboards'
formats: 'svg'
.pipe gulp.dest $.images
gulp.task 'og', ->
gulp.src $.og
.pipe sketch
export: 'artboards'
formats: 'png'
scales: '1.0'
.pipe gulp.dest $.dist
gulp.task 'css', ->
gulp.src $.style
.pipe cssimport()
.pipe autoprefixer 'last 2 versions'
.pipe minifyCss keepSpecialComments: 0
.pipe gulp.dest $.dist
gulp.task 'watch', ->
browserSync.init
notify: false
server: baseDir: './'
o = debounceDelay: 3000
gulp.watch [$.sitefiles], o, ['create-index']
gulp.watch [$.js, $.components], o, ['browserify']
gulp.watch [$.css], o, ['css']
gulp.watch [$.logo], o, ['logo']
gulp.watch [$.og], o, ['og']
gulp.watch $.watch, o, reload