This repository has been archived by the owner on Jan 8, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.coffee
104 lines (89 loc) · 3.5 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
autoprefixer = require 'autoprefixer'
babel = require 'gulp-babel'
cssnano = require 'gulp-cssnano'
del = require 'del'
gulp = require 'gulp'
gutil = require 'gulp-util'
htmlmin = require 'gulp-htmlmin'
htmlreplace = require 'gulp-html-replace'
rename = require 'gulp-rename'
rev = require 'gulp-rev'
revreplace = require 'gulp-rev-replace'
postcss = require 'gulp-postcss'
sass = require 'gulp-sass'
sasslint = require 'gulp-sass-lint'
sourcemaps = require 'gulp-sourcemaps'
ts = require 'gulp-typescript'
tslint = require 'gulp-tslint'
tsproject = ts.createProject 'tsconfig.json'
uglify = require 'gulp-uglify'
vinylpaths = require('vinyl-paths')
webserver = require 'gulp-webserver'
helpers =
do: (env, truthy, falsy = gutil.noop()) ->
if gutil.env.type is env then truthy else falsy
paths =
ts:
application: './src/ts/application.ts'
all: './src/ts/**/*.ts'
scss:
application: './src/scss/application.scss'
all: './src/scss/**/*.scss'
html: './src/index.html'
dist: './dist/'
tmp: './tmp/'
finalDest: -> helpers.do 'production', paths.dist, paths.tmp
gulp.task 'html', helpers.do('production', ['scss', 'ts'], []), ->
del ["#{paths.finalDest()}*.html"]
gulp.src paths.html
.pipe helpers.do 'production', htmlreplace css: 'application.min.css', js: 'application.min.js'
.pipe helpers.do 'production', revreplace manifest: gulp.src('./dist/rev-css.json')
.pipe helpers.do 'production', revreplace manifest: gulp.src('./dist/rev-js.json')
.pipe helpers.do 'production', htmlmin collapseInlineTagWhitespace: true, collapseWhitespace: true, removeComments: true
.pipe gulp.dest paths.finalDest
.pipe helpers.do 'production', vinylpaths -> del ['./dist/rev-css.json', './dist/rev-js.json']
gulp.task 'scss' , ->
del ["#{paths.finalDest()}*.css", "#{paths.finalDest()}*.css.map"]
gulp.src paths.scss.application
.pipe sourcemaps.init()
.pipe sass().on 'error', sass.logError
.pipe postcss [autoprefixer(browsers: ['last 2 versions'])]
.pipe helpers.do 'production', cssnano()
.pipe helpers.do 'production', rename extname: '.min.css'
.pipe helpers.do 'production', rev()
.pipe sourcemaps.write '.', includeContent: false, sourceRoot: '/'
.pipe gulp.dest paths.finalDest
.pipe helpers.do 'production', rev.manifest './rev-css.json'
.pipe gulp.dest paths.finalDest
gulp.task 'scsslint', ->
gulp.src paths.scss.all
.pipe sasslint configFile: '.scss-lint.yml'
.pipe sasslint.format()
.pipe sasslint.failOnError()
gulp.task 'ts', ->
del ["#{paths.finalDest()}*.js", "#{paths.finalDest()}*.js.map"]
gulp.src paths.ts.all
.pipe sourcemaps.init()
.pipe ts tsproject
.pipe babel presets: ['es2015']
.pipe helpers.do 'production', uglify wrap: true, screwIE8: true
.pipe helpers.do 'production', rename extname: '.min.js'
.pipe helpers.do 'production', rev()
.pipe sourcemaps.write '.', includeContent: false, sourceRoot: '/'
.pipe gulp.dest paths.finalDest
.pipe helpers.do 'production', rev.manifest './rev-js.json'
.pipe gulp.dest paths.finalDest
gulp.task 'tslint', ->
gulp.src paths.ts.all
.pipe tslint formatter: 'verbose'
.pipe tslint.report()
gulp.task 'lint', ['tslint', 'scsslint']
gulp.task 'compile', ['scss', 'ts', 'html']
gulp.task 'serve', ->
gulp.src './tmp/'
.pipe webserver livereload: true, host: 'renuo-upload-demo.dev', port: '9321', open: true
gulp.task 'watch', ->
gulp.watch [paths.ts.all], ['ts', 'tslint']
gulp.watch [paths.scss.all], ['scss', 'scsslint']
gulp.watch [paths.html], ['html']
gulp.task 'default', ['watch', 'serve']