Skip to content

Commit 33e14d7

Browse files
authored
New: Support flags.require config option (closes #108, closes #167) (#183)
1 parent a4236f2 commit 33e14d7

File tree

21 files changed

+225
-1
lines changed

21 files changed

+225
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ Supported configurations properties:
108108
| flags.gulpfile | Set a default gulpfile |
109109
| flags.silent | Silence logging by default |
110110
| flags.series | Run tasks given on the CLI in series (the default is parallel) |
111+
| flags.require | An array of modules to require before running the gulpfile. Any relative paths will be resolved against the `--cwd` directory (if you don't want that behavior, use absolute paths) |
111112

112113
## Flags
113114

@@ -147,7 +148,7 @@ __Some flags only work with gulp 4 and will be ignored when invoked against gulp
147148
<tr>
148149
<td>--cwd [path]</td>
149150
<td></td>
150-
<td>Manually set the CWD. The search for the gulpfile, as well as the relativity of all requires will be from here.</td>
151+
<td>Manually set the CWD. The search for the gulpfile, as well as the relativity of all requires (including the `--require` flag) will be from here.</td>
151152
</tr>
152153
<tr>
153154
<td>--verify [path (optional)]</td>

lib/shared/config/env-flags.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var copyProps = require('copy-props');
66
var toFrom = {
77
configPath: 'flags.gulpfile',
88
configBase: 'flags.gulpfile',
9+
require: 'flags.require',
910
};
1011

1112
function mergeConfigToEnvFlags(env, config) {
@@ -16,6 +17,9 @@ function convert(configInfo, envInfo) {
1617
if (envInfo.keyChain === 'configBase') {
1718
return path.dirname(configInfo.value);
1819
}
20+
if (envInfo.keyChain === 'require') {
21+
return [].concat(envInfo.value, configInfo.value);
22+
}
1923
return configInfo.value;
2024
}
2125

test/config-flags-require.js

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
'use strict';
2+
3+
var expect = require('expect');
4+
5+
var path = require('path');
6+
var fixturesDir = path.join(__dirname, 'fixtures/config');
7+
8+
var headLines = require('gulp-test-tools').headLines;
9+
var eraseTime = require('gulp-test-tools').eraseTime;
10+
var runner = require('gulp-test-tools').gulpRunner().basedir(fixturesDir);
11+
12+
describe('config: flags.require', function() {
13+
14+
it('Should configure with an array in a .gulp.* file', function(done) {
15+
runner
16+
.chdir('flags/require/array')
17+
.gulp()
18+
.run(cb);
19+
20+
function cb(err, stdout, stderr) {
21+
expect(err).toEqual(null);
22+
expect(stderr).toEqual('');
23+
24+
var requiring1 = eraseTime(headLines(stdout, 1));
25+
expect(requiring1).toEqual('Requiring external module ./preload_one');
26+
var requiring2 = eraseTime(headLines(stdout, 1, 1));
27+
expect(requiring2).toEqual('Requiring external module ./preload_two');
28+
var preload1 = eraseTime(headLines(stdout, 1, 4));
29+
expect(preload1).toEqual('preload one!');
30+
var preload2 = eraseTime(headLines(stdout, 1, 5));
31+
expect(preload2).toEqual('preload two!');
32+
done(err);
33+
}
34+
});
35+
36+
it('Should configure with a string in a .gulp.* file', function(done) {
37+
runner
38+
.chdir('flags/require/string')
39+
.gulp()
40+
.run(cb);
41+
42+
function cb(err, stdout, stderr) {
43+
expect(err).toEqual(null);
44+
expect(stderr).toEqual('');
45+
var requiring = eraseTime(headLines(stdout, 1));
46+
expect(requiring).toEqual('Requiring external module ./preload');
47+
var preload1 = eraseTime(headLines(stdout, 1, 3));
48+
expect(preload1).toEqual('hello preload!');
49+
done(err);
50+
}
51+
});
52+
53+
it('Combines --require flag with .gulp.* file flags.require', function(done) {
54+
runner
55+
.chdir('flags/require/join-flags')
56+
.gulp('--require ./preload_one')
57+
.run(cb);
58+
59+
function cb(err, stdout, stderr) {
60+
expect(err).toEqual(null);
61+
expect(stderr).toEqual('');
62+
63+
var requiring1 = eraseTime(headLines(stdout, 1));
64+
expect(requiring1).toEqual('Requiring external module ./preload_one');
65+
var requiring2 = eraseTime(headLines(stdout, 1, 1));
66+
expect(requiring2).toEqual('Requiring external module ./preload_two');
67+
var preload1 = eraseTime(headLines(stdout, 1, 4));
68+
expect(preload1).toEqual('preload one!');
69+
var preload2 = eraseTime(headLines(stdout, 1, 5));
70+
expect(preload2).toEqual('preload two!');
71+
done(err);
72+
}
73+
});
74+
75+
it('resolves relative requires against cwd', function(done) {
76+
runner
77+
.gulp('--cwd flags/require/with-cwd')
78+
.run(cb);
79+
80+
function cb(err, stdout, stderr) {
81+
expect(err).toEqual(null);
82+
expect(stderr).toEqual('');
83+
var requiring = eraseTime(headLines(stdout, 1));
84+
expect(requiring).toEqual('Requiring external module ../preload');
85+
var preload1 = eraseTime(headLines(stdout, 1, 4));
86+
expect(preload1).toEqual('hello preload!');
87+
done(err);
88+
}
89+
});
90+
91+
it('works with absolute paths, ignoring cwd', function(done) {
92+
runner
93+
.gulp('--cwd flags/require/with-absolute')
94+
.run(cb);
95+
96+
function cb(err, stdout, stderr) {
97+
expect(err).toEqual(null);
98+
expect(stderr).toEqual('');
99+
100+
var absolute = path.join(__dirname, './fixtures/config/flags/require/preload');
101+
var requiring = eraseTime(headLines(stdout, 1));
102+
expect(requiring).toEqual('Requiring external module ' + absolute);
103+
var preload1 = eraseTime(headLines(stdout, 1, 4));
104+
expect(preload1).toEqual('hello preload!');
105+
done(err);
106+
}
107+
});
108+
});
109+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"flags": {
3+
"require": [
4+
"./preload_one",
5+
"./preload_two"
6+
]
7+
}
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use strict';
2+
3+
var gulp = require('gulp');
4+
5+
gulp.task('default', function(done) {
6+
console.log(global.preload_one);
7+
console.log(global.preload_two);
8+
done();
9+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
global.preload_one = 'preload one!';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
global.preload_two = 'preload two!';
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"flags": {
3+
"require": [
4+
"./preload_two"
5+
]
6+
}
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use strict';
2+
3+
var gulp = require('gulp');
4+
5+
gulp.task('default', function(done) {
6+
console.log(global.preload_one);
7+
console.log(global.preload_two);
8+
done();
9+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
global.preload_one = 'preload one!';

0 commit comments

Comments
 (0)