Skip to content

Commit 83dc4e0

Browse files
Christopher A. DhanarajGitHub Enterprise
Christopher A. Dhanaraj
authored and
GitHub Enterprise
committed
chore(build): Refactored build (#2427)
* chore(tools): update all the build shenanigans * chore(deps): swap to lodash-es * chore(build): add @asudoh to list of creators * chore(build): add some comments for clarity in gulpfile * chore(build): update demo to CarbonComponents * chore(build): add compiled scripts to the build * fix(build): use rollup from node_modules * fix(build): update version to latest * fix(build): add deps in * fix(build): fix linting issue
1 parent a8cdb28 commit 83dc4e0

File tree

11 files changed

+213
-141
lines changed

11 files changed

+213
-141
lines changed

.babelrc

Lines changed: 0 additions & 17 deletions
This file was deleted.

.gitignore

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,10 @@ jsconfig.json
2727
tests/a11y-results
2828
tests/coverage
2929

30-
# JSDoc
31-
docs/js
30+
# built files
31+
es
32+
umd
33+
scripts
34+
css
35+
sass
36+
html

demo/.babelrc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"presets": [
3+
[
4+
"env",
5+
{
6+
"modules": false,
7+
"targets": {
8+
"browsers": ["last 1 version", "ie >= 11"]
9+
}
10+
}]
11+
],
12+
"plugins": ["transform-class-properties", "babel-plugin-external-helpers"],
13+
}

demo/views/demo-all.dust

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<!-- true = JavaScript will not initialize automatically -->
4040
<!-- false = JavaScript will initialize automatically -->
4141
<script>
42-
BluemixComponents.settings.disableAutoInit = false;
42+
CarbonComponents.settings.disableAutoInit = false;
4343
</script>
4444
</body>
4545
</html>

gulpfile.js

Lines changed: 93 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
'use strict';
22

3-
/**
4-
* Requires
5-
*/
6-
3+
// Node
74
const path = require('path');
5+
6+
// Styles
7+
const sass = require('gulp-sass');
88
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
917
const browserSync = require('browser-sync').create();
10-
const del = require('del');
18+
19+
// Gulp
1120
const gulp = require('gulp');
1221
const rename = require('gulp-rename');
13-
const sass = require('gulp-sass');
14-
const eslint = require('gulp-eslint');
1522
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');
2123
const gutil = require('gulp-util');
2224

25+
// Generic utility
26+
const del = require('del');
27+
const exec = require('child_process').exec;
28+
29+
// Test environment
2330
const Server = require('karma').Server;
2431
const cloptions = require('minimist')(process.argv.slice(2), {
2532
alias: {
@@ -47,6 +54,11 @@ gulp.task('browser-sync', () => {
4754

4855
// Use: npm run prebuild
4956
gulp.task('clean', () => del([
57+
'sass',
58+
'css',
59+
'es',
60+
'umd',
61+
'scripts',
5062
'dist',
5163
'demo/**/*.{js,map}',
5264
'!demo/js/demo-switcher.js',
@@ -59,82 +71,74 @@ gulp.task('clean', () => del([
5971
* JavaScript Tasks
6072
*/
6173

62-
function buildScripts(options) {
63-
options = options || {}; // eslint-disable-line no-param-reassign
64-
options.target = (options.target || './dist/bluemix-components.js')
65-
.replace(/\.js$/, 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: /\.js?$/,
81-
exclude: /node_modules/,
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);
9878
});
99-
}
100-
79+
});
10180

10281
gulp.task('scripts:umd', () => {
103-
const filesMain = './src/components/**/*.js';
104-
const filesOthers = './src/globals/js/**/*.js';
105-
82+
const srcFiles = ['./src/**/*.js'];
10683
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'],
10892
};
10993

110-
const mainStream = gulp.src(filesMain)
94+
return gulp.src(srcFiles)
11195
.pipe(babel(babelOpts))
112-
.pipe(gulp.dest('./dist/js/umd/lib'));
96+
.pipe(gulp.dest('umd/'));
97+
});
11398

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)
115115
.pipe(babel(babelOpts))
116-
.pipe(gulp.dest('./dist/js/umd'));
116+
.pipe(gulp.dest('es/'));
117+
});
117118

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+
});
119123
});
120124

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';
125127

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+
});
132135

133136
/**
134137
* Sass Tasks
135138
*/
136139

137-
gulp.task('sass:consumables', () => {
140+
141+
gulp.task('sass:compiled', () => {
138142
function buildStyles(prod) {
139143
return gulp.src('src/globals/scss/styles.scss')
140144
.pipe(sourcemaps.init())
@@ -146,14 +150,14 @@ gulp.task('sass:consumables', () => {
146150
}))
147151
.pipe(rename((filePath) => {
148152
if (filePath.basename === 'styles') {
149-
filePath.basename = 'bluemix-components';
153+
filePath.basename = 'carbon-components';
150154
}
151155
if (prod) {
152156
filePath.extname = `.min${filePath.extname}`;
153157
}
154158
}))
155159
.pipe(sourcemaps.write())
156-
.pipe(gulp.dest('dist'))
160+
.pipe(gulp.dest('css'))
157161
.pipe(browserSync.stream());
158162
}
159163

@@ -175,6 +179,13 @@ gulp.task('sass:dev', () =>
175179
.pipe(gulp.dest('demo'))
176180
.pipe(browserSync.stream()));
177181

182+
gulp.task('sass:source', () => {
183+
const srcFiles = './src/**/*.scss';
184+
185+
return gulp.src(srcFiles)
186+
.pipe(gulp.dest('sass'));
187+
});
188+
178189
/**
179190
* Lint
180191
*/
@@ -213,45 +224,14 @@ gulp.task('test:unit', (done) => {
213224
}, done).start();
214225
});
215226

216-
gulp.task('test:a11y', ['sass:consumables'], (done) => {
227+
gulp.task('test:a11y', ['sass:compiled'], (done) => {
217228
new Server({
218229
configFile: path.resolve(__dirname, 'tests/karma-ibma.conf.js'),
219230
singleRun: !cloptions.keepalive,
220231
}, done).start();
221232
});
222233

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
255235
gulp.task('watch', () => {
256236
gulp.watch('src/**/**/*.html').on('change', browserSync.reload);
257237
gulp.watch(['src/**/**/*.js'], ['scripts:dev']);
@@ -260,8 +240,14 @@ gulp.task('watch', () => {
260240

261241
gulp.task('serve', ['browser-sync', 'watch']);
262242

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
265251
gulp.task('build:dev', ['sass:dev', 'scripts:dev']);
266252

267253
gulp.task('default', () => {

0 commit comments

Comments
 (0)