Skip to content

Commit 7cee84d

Browse files
devversionjelbourn
authored andcommitted
chore: use gulp-connect as webserver (#2409)
* No longer rebuilds all components when changes have been recognized in the dev-app. * Allows us to only reload when gulp already recognized a change (no need for filtering and extra watchers) * No longer injects CSS as the previous live-server (injecting CSS does not work for Angular 2)
1 parent 026c70a commit 7cee84d

File tree

5 files changed

+37
-51
lines changed

5 files changed

+37
-51
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@
6767
"gulp-clean": "^0.3.2",
6868
"gulp-clean-css": "^2.3.0",
6969
"gulp-cli": "^1.2.2",
70+
"gulp-connect": "^5.0.0",
7071
"gulp-htmlmin": "^3.0.0",
7172
"gulp-if": "^2.0.2",
7273
"gulp-markdown": "^1.2.0",
7374
"gulp-sass": "^2.3.2",
74-
"gulp-server-livereload": "^1.8.2",
7575
"gulp-shell": "^0.5.2",
7676
"gulp-sourcemaps": "^1.6.0",
7777
"gulp-transform": "^1.1.0",

tools/gulp/task_helpers.ts

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ const gulpClean = require('gulp-clean');
1212
const gulpMerge = require('merge2');
1313
const gulpRunSequence = require('run-sequence');
1414
const gulpSass = require('gulp-sass');
15-
const gulpServer = require('gulp-server-livereload');
1615
const gulpSourcemaps = require('gulp-sourcemaps');
1716
const gulpAutoprefixer = require('gulp-autoprefixer');
17+
const gulpConnect = require('gulp-connect');
1818
const resolveBin = require('resolve-bin');
1919

2020

@@ -167,7 +167,8 @@ export function buildAppTask(appName: string) {
167167
return (done: () => void) => {
168168
gulpRunSequence(
169169
'clean',
170-
['build:components', ...buildTasks],
170+
'build:components',
171+
[...buildTasks],
171172
done
172173
);
173174
};
@@ -183,29 +184,23 @@ export function vendorTask() {
183184
}));
184185
}
185186

186-
export type livereloadOptions = boolean | {
187-
enable: boolean;
188-
filter: (filename: string, callback: (isAllowed: boolean) => void) => void;
189-
}
190-
191187
/** Create a task that serves the dist folder. */
192-
export function serverTask(liveReload: livereloadOptions = true,
193-
streamCallback: (stream: NodeJS.ReadWriteStream) => void = null) {
194-
188+
export function serverTask(livereload = true) {
195189
return () => {
196-
const stream = gulp.src('dist').pipe(gulpServer({
197-
livereload: liveReload,
198-
fallback: 'index.html',
199-
port: 4200
200-
}));
201-
202-
if (streamCallback) {
203-
streamCallback(stream);
204-
}
205-
return stream;
190+
gulpConnect.server({
191+
root: 'dist/',
192+
livereload: livereload,
193+
port: 4200,
194+
fallback: 'dist/index.html'
195+
});
206196
};
207197
}
208198

199+
/** Triggers a reload when livereload is enabled and a gulp-connect server is running. */
200+
export function triggerLivereload() {
201+
gulp.src('dist').pipe(gulpConnect.reload());
202+
}
203+
209204

210205
/** Create a task that's a sequence of other tasks. */
211206
export function sequenceTask(...args: any[]) {

tools/gulp/tasks/components.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import * as path from 'path';
44
import {
55
DIST_COMPONENTS_ROOT, PROJECT_ROOT, COMPONENTS_DIR, HTML_MINIFIER_OPTIONS, LICENSE_BANNER
66
} from '../constants';
7-
import {sassBuildTask, tsBuildTask, execNodeTask, copyTask, sequenceTask} from '../task_helpers';
7+
import {
8+
sassBuildTask, tsBuildTask, execNodeTask, copyTask, sequenceTask,
9+
triggerLivereload
10+
} from '../task_helpers';
811

912
// No typings for these.
1013
const inlineResources = require('../../../scripts/release/inline-resources');
@@ -27,9 +30,9 @@ const tsconfigPath = path.relative(PROJECT_ROOT, path.join(COMPONENTS_DIR, 'tsco
2730

2831
/** [Watch task] Rebuilds (ESM output) whenever ts, scss, or html sources change. */
2932
task(':watch:components', () => {
30-
watch(path.join(COMPONENTS_DIR, '**/*.ts'), ['build:components']);
31-
watch(path.join(COMPONENTS_DIR, '**/*.scss'), ['build:components']);
32-
watch(path.join(COMPONENTS_DIR, '**/*.html'), ['build:components']);
33+
watch(path.join(COMPONENTS_DIR, '**/*.ts'), ['build:components', triggerLivereload]);
34+
watch(path.join(COMPONENTS_DIR, '**/*.scss'), ['build:components', triggerLivereload]);
35+
watch(path.join(COMPONENTS_DIR, '**/*.html'), ['build:components', triggerLivereload]);
3336
});
3437

3538

tools/gulp/tasks/development.ts

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,27 @@ import * as path from 'path';
44
import {DIST_ROOT, SOURCE_ROOT} from '../constants';
55
import {
66
sassBuildTask, tsBuildTask, copyTask, buildAppTask, vendorTask,
7-
serverTask, sequenceTask
7+
serverTask, sequenceTask, triggerLivereload
88
} from '../task_helpers';
99

1010

1111
const appDir = path.join(SOURCE_ROOT, 'demo-app');
1212
const outDir = DIST_ROOT;
13-
const LIVERELOAD_PATTERNS = [
14-
/material\.umd\.js$/,
15-
/-demo\.[a-z]+$/,
16-
/\/theming\/prebuilt/
17-
];
1813

1914
task(':watch:devapp', () => {
20-
watch(path.join(appDir, '**/*.ts'), [':build:devapp:ts']);
21-
watch(path.join(appDir, '**/*.scss'), [':build:devapp:scss']);
22-
watch(path.join(appDir, '**/*.html'), [':build:devapp:assets']);
15+
watch(path.join(appDir, '**/*.ts'), [':build:devapp:ts', triggerLivereload]);
16+
watch(path.join(appDir, '**/*.scss'), [':build:devapp:scss', triggerLivereload]);
17+
watch(path.join(appDir, '**/*.html'), [':build:devapp:assets', triggerLivereload]);
2318
});
2419

2520

2621
task(':build:devapp:vendor', vendorTask());
27-
task(':build:devapp:ts', ['build:components'], tsBuildTask(appDir));
28-
task(':build:devapp:scss', [':build:components:scss'], sassBuildTask(outDir, appDir));
22+
task(':build:devapp:ts', tsBuildTask(appDir));
23+
task(':build:devapp:scss', sassBuildTask(outDir, appDir));
2924
task(':build:devapp:assets', copyTask(appDir, outDir));
3025
task('build:devapp', buildAppTask('devapp'));
3126

32-
task(':serve:devapp', serverTask({
33-
enable: true,
34-
filter: (filename: string, callback: Function) => {
35-
callback(LIVERELOAD_PATTERNS.some(pattern => pattern.test(filename)));
36-
}
37-
}));
27+
task(':serve:devapp', serverTask(true));
3828

3929
task('serve:devapp', ['build:devapp'], sequenceTask(
4030
[':serve:devapp', ':watch:components', ':watch:devapp']

tools/gulp/tasks/e2e.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@ import {
88
} from '../task_helpers';
99

1010
const gulpRunSequence = require('run-sequence');
11+
const gulpConnect = require('gulp-connect');
1112

1213
const appDir = path.join(SOURCE_ROOT, 'e2e-app');
1314
const outDir = DIST_ROOT;
1415
const PROTRACTOR_CONFIG_PATH = path.join(PROJECT_ROOT, 'test/protractor.conf.js');
1516

16-
/** Method to stop a running e2e web server, which may have not exited properly */
17-
let stopE2eServer = () => {};
18-
1917
task(':watch:e2eapp', () => {
2018
watch(path.join(appDir, '**/*.ts'), [':build:e2eapp:ts']);
2119
watch(path.join(appDir, '**/*.html'), [':build:e2eapp:assets']);
@@ -25,10 +23,10 @@ task(':watch:e2eapp', () => {
2523
task(':build:e2eapp:vendor', vendorTask());
2624

2725
/** Builds e2e app ts to js. */
28-
task(':build:e2eapp:ts', [':build:components:ts'], tsBuildTask(appDir));
26+
task(':build:e2eapp:ts', tsBuildTask(appDir));
2927

3028
/** No-op (needed by buildAppTask). */
31-
task(':build:e2eapp:scss', [':build:components:scss'], sassBuildTask(outDir, appDir));
29+
task(':build:e2eapp:scss', sassBuildTask(outDir, appDir));
3230

3331
/** Copies e2e app assets (html, css) to build output. */
3432
task(':build:e2eapp:assets', copyTask(appDir, outDir));
@@ -43,10 +41,10 @@ task(':test:protractor:setup', execNodeTask('protractor', 'webdriver-manager', [
4341
task(':test:protractor', execNodeTask('protractor', [PROTRACTOR_CONFIG_PATH]));
4442

4543
/** Starts up the e2e app server. */
46-
task(':serve:e2eapp', serverTask(false, stream => { stopE2eServer = () => stream.emit('kill'); }));
44+
task(':serve:e2eapp', serverTask(false));
4745

4846
/** Terminates the e2e app server */
49-
task(':serve:e2eapp:stop', () => stopE2eServer());
47+
task(':serve:e2eapp:stop', gulpConnect.serverClose);
5048

5149
/** Builds and serves the e2e app. */
5250
task('serve:e2eapp', sequenceTask('build:components', 'build:e2eapp', ':serve:e2eapp'));
@@ -68,7 +66,7 @@ task('e2e', (done: (err?: string) => void) => {
6866
'serve:e2eapp:watch',
6967
':test:protractor',
7068
':serve:e2eapp:stop',
71-
(err: any) => stopE2eServer() && done(err)
69+
(err: any) => gulpConnect.serverClose() && done(err)
7270
);
7371
});
7472

@@ -83,6 +81,6 @@ task('e2e:single-run', (done: (err?: string) => void) => {
8381
'serve:e2eapp',
8482
':test:protractor',
8583
':serve:e2eapp:stop',
86-
(err: any) => stopE2eServer() && done(err)
84+
(err: any) => gulpConnect.serverClose() && done(err)
8785
);
8886
});

0 commit comments

Comments
 (0)