UNPKG

4.19 kBJavaScriptView Raw
1'use strict';
2
3/* global require, process, __dirname */
4
5var log = require('debug-logdown')('gulp');
6
7var bold = require('quote')({ quotes: '*' });
8log.info('node', bold(process.version));
9
10require('babel-core/register');
11
12var 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');
22var glob = require('glob');
23var mocha = require('gulp-mocha');
24var pkg = require('./package.json');
25var join = require('path').join;
26
27var banner = ['/**',
28 ' * <%= pkg.name %> - <%= pkg.description %>',
29 ' * @version v<%= pkg.version %>',
30 ' */',
31 ''].join('\n');
32
33var isVerbose = process.argv.some(function (arg) {
34 return arg === '-v' || arg === '--verbose';
35});
36
37require('gulp-grunt')(gulp, { verbose: isVerbose });
38
39var src = glob.sync('src/**/*.js', 'src/**/*.es6');
40log.log('all source files:\n' + src.join('\n '));
41
42// need to skip specs
43function isSpecFile(filename) {
44 return !/-spec\./.test(filename);
45}
46src = src.filter(isSpecFile);
47log.log('just source files:\n' + src.join('\n '));
48
49var specs = ['src/**/*-spec.js', 'src/**/*-spec.es6'];
50var dest = './dist';
51
52gulp.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
60gulp.task('clean', function(cb) {
61 del([dest], cb);
62});
63
64gulp.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
73gulp.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
82gulp.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
91gulp.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
114gulp.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
140gulp.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
155gulp.task('test', ['mocha', 'grunt-clean-console']);
156
157gulp.task('watch', function() {
158 var options = { ignoreInitial: true };
159 watch(src, options, function () {
160 gulp.start('lint', 'webpack');
161 });
162});
163
164gulp.task('lint', ['lint:src', 'lint:specs', 'lint:gulpfile']);
165
166gulp.task('default', ['deps-ok', 'grunt-nice-package', 'clean'], function () {
167 gulp.start('lint', 'webpack', 'webpack-browser');
168});