1
1
'use strict' ;
2
2
3
- /**
4
- * Requires
5
- */
6
-
3
+ // Node
7
4
const path = require ( 'path' ) ;
5
+
6
+ // Styles
7
+ const sass = require ( 'gulp-sass' ) ;
8
8
const autoprefixer = require ( 'gulp-autoprefixer' ) ;
9
+
10
+ // Javascript deps
11
+ const babel = require ( 'gulp-babel' ) ;
12
+ const eslint = require ( 'gulp-eslint' ) ;
13
+ const uglify = require ( 'gulp-uglify' ) ;
14
+ const pump = require ( 'pump' ) ;
15
+
16
+ // BrowserSync
9
17
const browserSync = require ( 'browser-sync' ) . create ( ) ;
10
- const del = require ( 'del' ) ;
18
+
19
+ // Gulp
11
20
const gulp = require ( 'gulp' ) ;
12
21
const rename = require ( 'gulp-rename' ) ;
13
- const sass = require ( 'gulp-sass' ) ;
14
- const eslint = require ( 'gulp-eslint' ) ;
15
22
const sourcemaps = require ( 'gulp-sourcemaps' ) ;
16
- const jsdoc = require ( 'gulp-jsdoc3' ) ;
17
-
18
- const webpack = require ( 'webpack' ) ;
19
- const babel = require ( 'gulp-babel' ) ;
20
- const merge = require ( 'merge-stream' ) ;
21
23
const gutil = require ( 'gulp-util' ) ;
22
24
25
+ // Generic utility
26
+ const del = require ( 'del' ) ;
27
+ const exec = require ( 'child_process' ) . exec ;
28
+
29
+ // Test environment
23
30
const Server = require ( 'karma' ) . Server ;
24
31
const cloptions = require ( 'minimist' ) ( process . argv . slice ( 2 ) , {
25
32
alias : {
@@ -47,6 +54,11 @@ gulp.task('browser-sync', () => {
47
54
48
55
// Use: npm run prebuild
49
56
gulp . task ( 'clean' , ( ) => del ( [
57
+ 'sass' ,
58
+ 'css' ,
59
+ 'es' ,
60
+ 'umd' ,
61
+ 'scripts' ,
50
62
'dist' ,
51
63
'demo/**/*.{js,map}' ,
52
64
'!demo/js/demo-switcher.js' ,
@@ -59,82 +71,74 @@ gulp.task('clean', () => del([
59
71
* JavaScript Tasks
60
72
*/
61
73
62
- function buildScripts ( options ) {
63
- options = options || { } ; // eslint-disable-line no-param-reassign
64
- options . target = ( options . target || './dist/bluemix-components.js' )
65
- . replace ( / \. j s $ / , options . prod ? '.min.js' : '.js' ) ;
66
- return new Promise ( ( resolve , reject ) => {
67
- webpack ( {
68
- devtool : 'source-maps' ,
69
- entry : options . entry || './src/index.js' ,
70
- output : Object . assign ( {
71
- path : path . dirname ( options . target ) ,
72
- filename : path . basename ( options . target ) ,
73
- } , options . noExport ? { } : {
74
- libraryTarget : 'var' ,
75
- library : 'BluemixComponents' ,
76
- } ) ,
77
- module : {
78
- rules : [
79
- {
80
- test : / \. j s ? $ / ,
81
- exclude : / n o d e _ m o d u l e s / ,
82
- use : [ 'babel-loader' ] ,
83
- } ,
84
- ] ,
85
- } ,
86
- plugins : options . prod ? [ new webpack . optimize . UglifyJsPlugin ( ) ] : [ ] ,
87
- } , ( err , stats ) => {
88
- if ( err ) {
89
- reject ( new gutil . PluginError ( 'webpack' , err ) ) ;
90
- } else {
91
- gutil . log ( '[webpack]' , stats . toString ( {
92
- progress : true ,
93
- colors : true ,
94
- } ) ) ;
95
- resolve ( ) ;
96
- }
97
- } ) ;
74
+ gulp . task ( 'scripts:dev' , ( cb ) => {
75
+ exec ( './node_modules/.bin/rollup -c tools/rollup.config.dev.js' , ( err ) => {
76
+ browserSync . reload ( ) ;
77
+ cb ( err ) ;
98
78
} ) ;
99
- }
100
-
79
+ } ) ;
101
80
102
81
gulp . task ( 'scripts:umd' , ( ) => {
103
- const filesMain = './src/components/**/*.js' ;
104
- const filesOthers = './src/globals/js/**/*.js' ;
105
-
82
+ const srcFiles = [ './src/**/*.js' ] ;
106
83
const babelOpts = {
107
- plugins : [ 'transform-es2015-modules-umd' , 'transform-runtime' ] ,
84
+ presets : [
85
+ [ 'env' , {
86
+ targets : {
87
+ browsers : [ 'last 1 version' , 'ie >= 11' ] ,
88
+ } ,
89
+ } ] ,
90
+ ] ,
91
+ plugins : [ 'transform-es2015-modules-umd' , 'transform-class-properties' ] ,
108
92
} ;
109
93
110
- const mainStream = gulp . src ( filesMain )
94
+ return gulp . src ( srcFiles )
111
95
. pipe ( babel ( babelOpts ) )
112
- . pipe ( gulp . dest ( './dist/js/umd/lib' ) ) ;
96
+ . pipe ( gulp . dest ( 'umd/' ) ) ;
97
+ } ) ;
113
98
114
- const othersStream = gulp . src ( filesOthers )
99
+
100
+ gulp . task ( 'scripts:es' , ( ) => {
101
+ const srcFiles = [ './src/**/*.js' ] ;
102
+ const babelOpts = {
103
+ presets : [
104
+ [ 'env' , {
105
+ modules : false ,
106
+ targets : {
107
+ browsers : [ 'last 1 version' , 'ie >= 11' ] ,
108
+ } ,
109
+ } ] ,
110
+ ] ,
111
+ plugins : [ 'transform-class-properties' ] ,
112
+ } ;
113
+
114
+ return gulp . src ( srcFiles )
115
115
. pipe ( babel ( babelOpts ) )
116
- . pipe ( gulp . dest ( './dist/js/umd' ) ) ;
116
+ . pipe ( gulp . dest ( 'es/' ) ) ;
117
+ } ) ;
117
118
118
- return merge ( mainStream , othersStream ) ;
119
+ gulp . task ( 'scripts:rollup' , ( cb ) => {
120
+ exec ( './node_modules/.bin/rollup -c tools/rollup.config.js' , ( err ) => {
121
+ cb ( err ) ;
122
+ } ) ;
119
123
} ) ;
120
124
121
- gulp . task ( 'scripts:consumables' , ( ) => Promise . all ( [
122
- buildScripts ( ) , // Expanded ES5
123
- buildScripts ( { prod : true } ) , // Minified ES5
124
- ] ) ) ;
125
+ gulp . task ( 'scripts:compiled' , [ 'scripts:rollup' ] , ( cb ) => {
126
+ const srcFile = './scripts/carbon-components.js' ;
125
127
126
- gulp . task ( 'scripts:dev' , ( ) => Promise . all ( [
127
- buildScripts ( {
128
- target : './demo/demo.js' ,
129
- entry : './demo/index.js' ,
130
- } ) ,
131
- ] ) ) ;
128
+ pump ( [
129
+ gulp . src ( srcFile ) ,
130
+ uglify ( ) ,
131
+ rename ( 'carbon-components.min.js' ) ,
132
+ gulp . dest ( 'scripts' ) ,
133
+ ] , cb ) ;
134
+ } ) ;
132
135
133
136
/**
134
137
* Sass Tasks
135
138
*/
136
139
137
- gulp . task ( 'sass:consumables' , ( ) => {
140
+
141
+ gulp . task ( 'sass:compiled' , ( ) => {
138
142
function buildStyles ( prod ) {
139
143
return gulp . src ( 'src/globals/scss/styles.scss' )
140
144
. pipe ( sourcemaps . init ( ) )
@@ -146,14 +150,14 @@ gulp.task('sass:consumables', () => {
146
150
} ) )
147
151
. pipe ( rename ( ( filePath ) => {
148
152
if ( filePath . basename === 'styles' ) {
149
- filePath . basename = 'bluemix -components' ;
153
+ filePath . basename = 'carbon -components' ;
150
154
}
151
155
if ( prod ) {
152
156
filePath . extname = `.min${ filePath . extname } ` ;
153
157
}
154
158
} ) )
155
159
. pipe ( sourcemaps . write ( ) )
156
- . pipe ( gulp . dest ( 'dist ' ) )
160
+ . pipe ( gulp . dest ( 'css ' ) )
157
161
. pipe ( browserSync . stream ( ) ) ;
158
162
}
159
163
@@ -175,6 +179,13 @@ gulp.task('sass:dev', () =>
175
179
. pipe ( gulp . dest ( 'demo' ) )
176
180
. pipe ( browserSync . stream ( ) ) ) ;
177
181
182
+ gulp . task ( 'sass:source' , ( ) => {
183
+ const srcFiles = './src/**/*.scss' ;
184
+
185
+ return gulp . src ( srcFiles )
186
+ . pipe ( gulp . dest ( 'sass' ) ) ;
187
+ } ) ;
188
+
178
189
/**
179
190
* Lint
180
191
*/
@@ -213,45 +224,14 @@ gulp.task('test:unit', (done) => {
213
224
} , done ) . start ( ) ;
214
225
} ) ;
215
226
216
- gulp . task ( 'test:a11y' , [ 'sass:consumables ' ] , ( done ) => {
227
+ gulp . task ( 'test:a11y' , [ 'sass:compiled ' ] , ( done ) => {
217
228
new Server ( {
218
229
configFile : path . resolve ( __dirname , 'tests/karma-ibma.conf.js' ) ,
219
230
singleRun : ! cloptions . keepalive ,
220
231
} , done ) . start ( ) ;
221
232
} ) ;
222
233
223
- /**
224
- * JSDoc
225
- */
226
-
227
- gulp . task ( 'jsdoc' , ( cb ) => {
228
- gulp . src ( './src/components/**/*.js' )
229
- . pipe ( babel ( {
230
- plugins : [ 'transform-class-properties' ] ,
231
- babelrc : false ,
232
- } ) )
233
- . pipe ( gulp . dest ( './docs/js/tmp' ) )
234
- . on ( 'end' , ( ) => {
235
- gulp . src ( [ 'README.md' , 'docs/js/tmp/**/*.js' ] , { read : false } )
236
- . pipe ( jsdoc ( Object . assign ( require ( 'gulp-jsdoc3/dist/jsdocConfig.json' ) , { // eslint-disable-line global-require
237
- opts : {
238
- destination : './docs/js' ,
239
- } ,
240
- } ) , ( err ) => {
241
- if ( err ) {
242
- cb ( err ) ;
243
- } else {
244
- del ( './docs/js/tmp' , cb ) ;
245
- }
246
- } ) ) ;
247
- } )
248
- . on ( 'error' , cb ) ;
249
- } ) ;
250
-
251
- /**
252
- * Running Tasks
253
- */
254
-
234
+ // Watch Tasks
255
235
gulp . task ( 'watch' , ( ) => {
256
236
gulp . watch ( 'src/**/**/*.html' ) . on ( 'change' , browserSync . reload ) ;
257
237
gulp . watch ( [ 'src/**/**/*.js' ] , [ 'scripts:dev' ] ) ;
@@ -260,8 +240,14 @@ gulp.task('watch', () => {
260
240
261
241
gulp . task ( 'serve' , [ 'browser-sync' , 'watch' ] ) ;
262
242
263
- // Use: npm run build
264
- gulp . task ( 'build' , [ 'sass:consumables' , 'scripts:consumables' ] ) ;
243
+ // Build task collection
244
+ gulp . task ( 'build:scripts' , [ 'scripts:umd' , 'scripts:es' , 'scripts:compiled' ] ) ;
245
+ gulp . task ( 'build:styles' , [ 'sass:compiled' , 'sass:source' ] ) ;
246
+
247
+ // Mapped to npm run build
248
+ gulp . task ( 'build' , [ 'build:scripts' , 'build:styles' ] ) ;
249
+
250
+ // For demo environment
265
251
gulp . task ( 'build:dev' , [ 'sass:dev' , 'scripts:dev' ] ) ;
266
252
267
253
gulp . task ( 'default' , ( ) => {
0 commit comments