1 | 'use strict';
|
2 |
|
3 | var options = require('minimist')(process.argv.slice(2));
|
4 |
|
5 | if (!options.o) {
|
6 | console.error(' Enter output path');
|
7 | process.exit(1);
|
8 | }
|
9 |
|
10 | var 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 |
|
21 | var
|
22 |
|
23 | lastFilesCount = -1,
|
24 | tasks = [],
|
25 |
|
26 | buildSystem = [
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | { task: "stylus", order: 3, path: `${ conf.srcPath }stylus/**/*.styl` },
|
32 | { task: "css", order: 4, path: `${ conf.srcPath }css/**/*.css` },
|
33 |
|
34 |
|
35 | { task: "coffee", order: 5, path: `${ conf.srcPath }coffee/**/*.coffee` },
|
36 | { task: "js", order: 6, path: `${ conf.srcPath }js/**/*.js` },
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | ];
|
43 |
|
44 |
|
45 |
|
46 | var
|
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 |
|
71 | function 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 |
|
84 | gulp.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 |
|
93 | gulp.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 |
|
102 | gulp.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 |
|
111 | gulp.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 |
|
130 | gulp.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 |
|
146 | gulp.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 |
|
157 | gulp.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 |
|
167 | gulp.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 |
|
185 | gulp.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 |
|
200 | gulp.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 |
|
207 | gulp.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 |
|
215 | gulp.task('default', [ 'build' ]);
|
216 |
|
217 |
|
218 | setInterval(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);
|