1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 | var log = require('debug-logdown')('gulp');
|
6 |
|
7 | var bold = require('quote')({ quotes: '*' });
|
8 | log.info('node', bold(process.version));
|
9 |
|
10 | require('babel-core/register');
|
11 |
|
12 | var gulp = require('gulp'),
|
13 | eslint = require('gulp-eslint'),
|
14 | uglify = require('gulp-uglify'),
|
15 | rename = require('gulp-rename'),
|
16 | notify = require('gulp-notify'),
|
17 | del = require('del'),
|
18 | watch = require('gulp-watch'),
|
19 | gutil = require('gulp-util'),
|
20 | webpack = require('gulp-webpack'),
|
21 | header = require('gulp-header');
|
22 | var glob = require('glob');
|
23 | var mocha = require('gulp-mocha');
|
24 | var pkg = require('./package.json');
|
25 | var join = require('path').join;
|
26 |
|
27 | var banner = ['/**',
|
28 | ' * <%= pkg.name %> - <%= pkg.description %>',
|
29 | ' * @version v<%= pkg.version %>',
|
30 | ' */',
|
31 | ''].join('\n');
|
32 |
|
33 | var isVerbose = process.argv.some(function (arg) {
|
34 | return arg === '-v' || arg === '--verbose';
|
35 | });
|
36 |
|
37 | require('gulp-grunt')(gulp, { verbose: isVerbose });
|
38 |
|
39 | var src = glob.sync('src/**/*.js', 'src/**/*.es6');
|
40 | log.log('all source files:\n' + src.join('\n '));
|
41 |
|
42 |
|
43 | function isSpecFile(filename) {
|
44 | return !/-spec\./.test(filename);
|
45 | }
|
46 | src = src.filter(isSpecFile);
|
47 | log.log('just source files:\n' + src.join('\n '));
|
48 |
|
49 | var specs = ['src/**/*-spec.js', 'src/**/*-spec.es6'];
|
50 | var dest = './dist';
|
51 |
|
52 | gulp.task('deps-ok', function () {
|
53 | var depsOk = require('deps-ok');
|
54 | var ok = depsOk(process.cwd(), false);
|
55 | if (!ok) {
|
56 | gulp.emit('error', new gutil.PluginError('deps-ok', 'Found outdated installs'));
|
57 | }
|
58 | });
|
59 |
|
60 | gulp.task('clean', function(cb) {
|
61 | del([dest], cb);
|
62 | });
|
63 |
|
64 | gulp.task('lint:src', function () {
|
65 | return gulp.src(src)
|
66 | .pipe(eslint({
|
67 | useEslintrc: true
|
68 | }))
|
69 | .pipe(eslint.format())
|
70 | .pipe(eslint.failOnError());
|
71 | });
|
72 |
|
73 | gulp.task('lint:specs', function () {
|
74 | return gulp.src(specs)
|
75 | .pipe(eslint({
|
76 | useEslintrc: true
|
77 | }))
|
78 | .pipe(eslint.format())
|
79 | .pipe(eslint.failOnError());
|
80 | });
|
81 |
|
82 | gulp.task('lint:gulpfile', function () {
|
83 | return gulp.src('gulpfile.js')
|
84 | .pipe(eslint({
|
85 | useEslintrc: true
|
86 | }))
|
87 | .pipe(eslint.format())
|
88 | .pipe(eslint.failOnError());
|
89 | });
|
90 |
|
91 | gulp.task('webpack', function () {
|
92 | return gulp.src('')
|
93 | .pipe(webpack({
|
94 | entry: './src/k2.es6',
|
95 | module: {
|
96 | loaders: [
|
97 | { test: /\.es6$/, exclude: /node_modules/, loader: 'babel-loader' }
|
98 | ]
|
99 | },
|
100 | output: {
|
101 | filename: 'k2.js',
|
102 | library: 'k2',
|
103 | libraryTarget: 'umd'
|
104 | }
|
105 | }))
|
106 | .pipe(header(banner, { pkg: pkg }))
|
107 | .pipe(gulp.dest(dest))
|
108 | .pipe(rename({suffix: '.min'}))
|
109 | .pipe(uglify())
|
110 | .pipe(gulp.dest(dest))
|
111 | .pipe(notify({ message: 'webpack task complete, includes lodash' }));
|
112 | });
|
113 |
|
114 | gulp.task('webpack-browser', function () {
|
115 | return gulp.src('')
|
116 | .pipe(webpack({
|
117 | entry: './src/k2.es6',
|
118 | module: {
|
119 | loaders: [
|
120 | { test: /\.es6$/, exclude: /node_modules/, loader: 'babel-loader' }
|
121 | ]
|
122 | },
|
123 | externals: {
|
124 | lodash: '_'
|
125 | },
|
126 | output: {
|
127 | filename: 'k2-browser.js',
|
128 | library: 'k2',
|
129 | libraryTarget: 'umd'
|
130 | }
|
131 | }))
|
132 | .pipe(header(banner, { pkg: pkg }))
|
133 | .pipe(gulp.dest(dest))
|
134 | .pipe(rename({suffix: '.min'}))
|
135 | .pipe(uglify())
|
136 | .pipe(gulp.dest(dest))
|
137 | .pipe(notify({ message: 'webpack (without lodash) browser task complete' }));
|
138 | });
|
139 |
|
140 | gulp.task('mocha', function () {
|
141 | var outputFolder = process.env.CIRCLE_TEST_REPORTS;
|
142 | var outputFilename = outputFolder ? join(outputFolder, 'junit.xml') : null;
|
143 | var reporter = outputFilename ? 'xunit' : 'spec';
|
144 |
|
145 | return gulp.src(specs, {read: false})
|
146 | .pipe(mocha({
|
147 | reporter: reporter,
|
148 | ui: 'bdd',
|
149 | reporterOptions: {
|
150 | output: outputFilename
|
151 | }
|
152 | }));
|
153 | });
|
154 |
|
155 | gulp.task('test', ['mocha', 'grunt-clean-console']);
|
156 |
|
157 | gulp.task('watch', function() {
|
158 | var options = { ignoreInitial: true };
|
159 | watch(src, options, function () {
|
160 | gulp.start('lint', 'webpack');
|
161 | });
|
162 | });
|
163 |
|
164 | gulp.task('lint', ['lint:src', 'lint:specs', 'lint:gulpfile']);
|
165 |
|
166 | gulp.task('default', ['deps-ok', 'grunt-nice-package', 'clean'], function () {
|
167 | gulp.start('lint', 'webpack', 'webpack-browser');
|
168 | });
|