UNPKG

6.46 kBJavaScriptView Raw
1'use strict';
2
3var options = require('minimist')(process.argv.slice(2));
4
5if (!options.o) {
6 console.error(' Enter output path');
7 process.exit(1);
8}
9
10var conf = {
11 outputPath: options.o,
12 minify: options.min || options.minify || false,
13 concat: options.conc || options.concat || true,
14 stylusPaths: [ 'C:/GoogleDrive/Web/extra/stylus' ],
15 srcPath: `${ options.o }source/`,
16}
17
18
19
20/* CONFG */
21var
22
23 lastFilesCount = -1,
24 tasks = [],
25
26 buildSystem = [
27 // order: less > sass > stylus => css
28 // css
29 // { task: "less", order: 1, path: `${ conf.srcPath }less/**/*.less` },
30 // { task: "sass", order: 2, path: `${ conf.srcPath }sass/**/*.s[c|a]ss` },
31 { task: "stylus", order: 3, path: `${ conf.srcPath }stylus/**/*.styl` },
32 { task: "css", order: 4, path: `${ conf.srcPath }css/**/*.css` },
33
34 // js
35 { task: "coffee", order: 5, path: `${ conf.srcPath }coffee/**/*.coffee` },
36 { task: "js", order: 6, path: `${ conf.srcPath }js/**/*.js` },
37
38 // html
39 // { task: "ect", order: 7, path: `${ conf.srcPath }ect/**/*.ect` },
40 // { task: "ejs", order: 8, path: `${ conf.srcPath }ejs/**/*.ejs` },
41 // { task: "jade", order: 9, path: `${ conf.srcPath }jade/**/*.jade` },
42 ];
43
44
45/* Gulp */
46var
47 gulp = require("gulp"),
48 minifyCSS = require("gulp-minify-css"),
49 concatCSS = require("gulp-concat-css"),
50 sass = require("gulp-sass"),
51 stylus = require("gulp-stylus"),
52 rename = require("gulp-rename"),
53 uglify = require("gulp-uglify"),
54 gulpConcat = require("gulp-concat"),
55 less = require("gulp-less"),
56 coffee = require("gulp-coffee"),
57 postcss = require("gulp-postcss"),
58 autoprefixer = require("autoprefixer"),
59 changed = require("gulp-changed"),
60 ejs = require("gulp-ejs"),
61 ect = require("gulp-ect-simple"),
62 jade = require("gulp-jade"),
63 gulpif = require("gulp-if"),
64 livereload = require("gulp-livereload"),
65 nodeDir = require("node-dir"),
66 _ = require("lodash");
67
68
69
70
71function log(msg) {
72 var str = "";
73
74 if (arguments.length === 2)
75 str = ` ${ msg } -> `;
76 else
77 str = ` ${ msg.name }: ${ msg.message } ${ msg.filename }`;
78
79 console.log(str);
80};
81
82
83/* CSS */
84gulp.task("sass", function() {
85 log("SASS", true);
86
87 gulp.src([ `${conf.srcPath}sass/**/*.s[c|a]ss`, `!${conf.srcPath}sass/**/_*.s[c|a]ss` ])
88 .pipe(changed(`${conf.srcPath}css/`))
89 .pipe(sass().on("error", sass.logError))
90 .pipe(gulp.dest(`${conf.srcPath}css/_sass/`));
91});
92
93gulp.task("stylus", function() {
94 log("Stylus", true);
95
96 gulp.src([ `${conf.srcPath}stylus/**/*.styl`, `!${conf.srcPath}stylus/**/_*.styl` ])
97 .pipe(changed(`${conf.srcPath}css/`))
98 .pipe(stylus({ paths: conf.stylusPaths, compress: false }).on("error", log))
99 .pipe(gulp.dest(`${conf.srcPath}css/_stylus/`));
100});
101
102gulp.task("less", function() {
103 log("LESS", true);
104
105 gulp.src([ `${conf.srcPath}less/**/*.less`, `!${conf.srcPath}less/**/_*.less` ])
106 .pipe(changed(`${conf.srcPath}css/`))
107 .pipe(less().on("error", log))
108 .pipe(gulp.dest(`${conf.srcPath}css/_less/`));
109});
110
111gulp.task("css", function() {
112 log("CSS", true);
113
114 gulp.src([ `${conf.srcPath}css/**/*.css`, `!${conf.srcPath}css/**/_*.css` ])
115 .pipe(changed(`${conf.outputPath}css/`))
116
117 .pipe(gulpif(conf.concat, concatCSS('main.css', { rebaseUrls: false })))
118 .pipe(gulpif(conf.minify, minifyCSS({ rebase: true, root: './' }).on("error", log)))
119
120 .pipe(gulpif(conf.minify, rename(function(path) { path.basename += '.min' })))
121 .pipe(gulpif(!conf.minify, rename({ dirname: '' })))
122
123 .pipe(postcss([ autoprefixer({ browsers: [ "> 1%" ] }) ]))
124 .pipe(gulp.dest(`${conf.outputPath}style/`))
125 .pipe(livereload());
126});
127
128
129/* JavaScript */
130gulp.task("js", function() {
131 log("JavaScript", true);
132
133 gulp.src([ `${conf.srcPath}js/**/*.js`, `!${conf.srcPath}js/**/_*.js` ])
134 .pipe(changed(`${conf.outputPath}js/`))
135
136 .pipe(gulpif(conf.concat, gulpConcat('main.js')))
137 .pipe(gulpif(conf.minify, uglify().on("error", log)))
138
139 .pipe(gulpif(conf.minify, rename(function(path) { path.basename += '.min' })))
140 .pipe(gulpif(!conf.minify, rename({ dirname: '' })))
141
142 .pipe(gulp.dest(`${conf.outputPath}js/`))
143 .pipe(livereload());
144});
145
146gulp.task("coffee", function() {
147 log("CoffeeScript", true);
148
149 gulp.src([ `${conf.srcPath}coffee/**/*.coffee`, `!${conf.srcPath}coffee/**/_*.coffee` ])
150 .pipe(changed(`${conf.srcPath}js/`))
151 .pipe(coffee({ bare: true }).on('error', log))
152 .pipe(gulp.dest(`${conf.srcPath}js/_coffee/`));
153});
154
155
156/* HTML */
157gulp.task("ejs", function() {
158 log("Ejs", true);
159
160 gulp.src([ `${conf.srcPath}ejs/**/*.ejs`, `!${conf.srcPath}ejs/**/_*.ejs` ])
161 .pipe(changed(`${conf.srcPath}html/`))
162 .pipe(ejs().on("error", log))
163 .pipe(gulp.dest(conf.outputPath))
164 .pipe(livereload());
165});
166
167gulp.task("ect", function() {
168 log("Ect", true);
169
170 gulp.src([ `${conf.srcPath}ect/**/*.ect`, `!${conf.srcPath}ect/**/_*.ect` ])
171 .pipe(changed(conf.outputPath))
172 .pipe(rename({ dirname: '' }))
173 .pipe(ect({
174 options: {
175 root: `${conf.srcPath}ect/`,
176 ext: ".ect",
177 open: "{{",
178 close: "}}"
179 }
180 }).on("error", log))
181 .pipe(gulp.dest(conf.outputPath))
182 .pipe(livereload());
183});
184
185gulp.task("jade", function() {
186 log("Jade", true);
187
188 gulp.src([ `${conf.srcPath}jade/**/*.jade`, `!${conf.srcPath}jade/**/_*.jade` ])
189 .pipe(changed(conf.outputPath))
190 .pipe(rename({ dirname: '' }))
191 .pipe(jade({
192 pretty: true
193 }).on("error", log))
194 .pipe(gulp.dest(conf.outputPath))
195 .pipe(livereload());
196});
197
198
199/* GULP */
200gulp.task("watch", [ 'build' ], function() {
201 livereload.listen();
202
203 for (var i = 0, len = buildSystem.length; i < len; i++)
204 tasks.push(gulp.watch(buildSystem[i].path, [ buildSystem[i].task ]));
205});
206
207gulp.task('build', function() {
208 var tasks = _.sortBy(buildSystem, 'order');
209
210 _.forOwn(tasks, function(task) {
211 task.task && gulp.run(task.task);
212 })
213});
214
215gulp.task('default', [ 'build' ]);
216
217
218setInterval(function() {
219 nodeDir.files(conf.srcPath, function(err, files) {
220 if (err)
221 return console.error(err);
222
223 if (lastFilesCount !== -1 && lastFilesCount !== files.length) {
224 console.log('New file added');
225
226 tasks.forEach(function(t) {
227 t.end();
228 });
229
230 tasks = [];
231
232 gulp.run("watch");
233 }
234
235 lastFilesCount = files.length;
236 });
237}, 500);