Skip to content

Commit a9c820f

Browse files
committed
[feat] diff build for spm-webpack-server
1 parent d5c30e0 commit a9c820f

File tree

4 files changed

+181
-11
lines changed

4 files changed

+181
-11
lines changed

cli.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ program
2323
.option('--weinre', 'weinre')
2424
.option('--https', 'https')
2525
.option('--verbose', 'show more logging')
26+
.option('--define [yourMode]', 'using the value of pkg.spm.define.yourMode or pkg.spm.define.default when "yourMode" is not specified')
2627
.parse(process.argv);
2728

2829
//log.config(program);
@@ -35,7 +36,8 @@ var args = {
3536
weinre: program.weinre,
3637
livereload: program.livereload,
3738
proxy: program.proxy,
38-
port: program.port || 8000
39+
port: program.port || 8000,
40+
define: program.define
3941
};
4042

4143
var sw = require('spm-webpack');
@@ -58,16 +60,6 @@ sw.build.installDeps(args, function() {
5860
var spmArgs = extend(true, {}, {server:{devtool:'#source-map'}}, spmArgv(cwd,wpOpts.pkg));
5961
wpOpts.devtool = spmArgs.server.devtool;
6062

61-
if (spmArgs.server.define) {
62-
for (var i=0; i<wpOpts.plugins.length; i++) {
63-
var p = wpOpts.plugins[i];
64-
if (p.definitions) {
65-
wpOpts.plugins.splice(i, 1);
66-
break;
67-
}
68-
}
69-
wpOpts.plugins.push(new sw.webpack.DefinePlugin(spmArgs.server.define));
70-
}
7163

7264
isPortInUse(args.port, function() {
7365
log.error('error', 'port %s is in use', args.port);

test/fixtures/define/a.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
console.log(NAME, AGE, FLAG);

test/fixtures/define/package.json

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"spm": {
3+
"output": [
4+
"a.js"
5+
],
6+
"define": {
7+
"dev": {
8+
"NAME": "dev",
9+
"AGE": 1,
10+
"FLAG": true
11+
},
12+
"test": {
13+
"NAME": "test",
14+
"AGE": 2000000000,
15+
"FLAG": false
16+
},
17+
"prod": {
18+
"NAME": "prod",
19+
"AGE": -1,
20+
"FLAG": true
21+
},
22+
"default": {
23+
"NAME": "default",
24+
"AGE": 0,
25+
"FLAG": false
26+
}
27+
},
28+
"build": {
29+
"define": {
30+
"NAME": "build",
31+
"AGE": 0,
32+
"FLAG": false,
33+
"prod": {
34+
"NAME": "dev",
35+
"AGE": 1,
36+
"FLAG": true
37+
}
38+
}
39+
},
40+
"server": {
41+
"define": {
42+
"NAME": "server",
43+
"AGE": 0,
44+
"FLAG": false,
45+
"prod": {
46+
"NAME": "dev",
47+
"AGE": 1,
48+
"FLAG": true
49+
}
50+
}
51+
}
52+
}
53+
}

test/index.js

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,127 @@ describe('server-with-specify-dest', function() {
254254

255255
});
256256

257+
describe('server-with-define', function() {
258+
259+
var app = null;
260+
var args = null;
261+
262+
before(function (done) {
263+
args = {
264+
cwd : join(fixtures, 'define'),
265+
define: 'prod',
266+
debug: true
267+
};
268+
process.chdir(args.cwd);
269+
var pkgFile = join(args.cwd, 'package.json');
270+
if (existsSync(pkgFile)) {
271+
args.pkg = JSON.parse(readFileSync(pkgFile, 'utf-8'));
272+
args.pkg.spm.hash = false;
273+
}
274+
sw.build.getWebpackOpts(args, function (err, webpackOpts) {
275+
var server = new Server(sw.webpack(webpackOpts), args);
276+
app = server.app;
277+
server.once('done', done);
278+
});
279+
});
280+
281+
it('get /a.js', function(done) {
282+
request(app.listen())
283+
.get('/a.js')
284+
.expect(function(res){
285+
if(res.text.indexOf('NAME') > -1 || res.text.indexOf('AGE') > -1 || res.text.indexOf('FLAG') > -1){
286+
throw new Error('define param failed');
287+
}else if(res.text.indexOf('console.log(("prod"), (-1), (true));') === -1){
288+
throw new Error('define param to a wrong value');
289+
}
290+
})
291+
.end(function(err){
292+
if (err) return done(err);
293+
done();
294+
});
295+
});
296+
297+
});
298+
299+
describe('server-with-define-default', function() {
300+
301+
var app = null;
302+
var args = null;
303+
304+
before(function (done) {
305+
args = {
306+
cwd : join(fixtures, 'define'),
307+
define: true,
308+
debug: true
309+
};
310+
process.chdir(args.cwd);
311+
var pkgFile = join(args.cwd, 'package.json');
312+
if (existsSync(pkgFile)) {
313+
args.pkg = JSON.parse(readFileSync(pkgFile, 'utf-8'));
314+
args.pkg.spm.hash = false;
315+
}
316+
sw.build.getWebpackOpts(args, function (err, webpackOpts) {
317+
var server = new Server(sw.webpack(webpackOpts), args);
318+
app = server.app;
319+
server.once('done', done);
320+
});
321+
});
322+
323+
it('get /a.js', function(done) {
324+
request(app.listen())
325+
.get('/a.js')
326+
.expect(function(res){
327+
if(res.text.indexOf('NAME') > -1 || res.text.indexOf('AGE') > -1 || res.text.indexOf('FLAG') > -1){
328+
throw new Error('define param failed');
329+
}else if(res.text.indexOf('console.log(("default"), (0), (false));') === -1){
330+
throw new Error('define param to a wrong value');
331+
}
332+
})
333+
.end(function(err){
334+
if (err) return done(err);
335+
done();
336+
});
337+
});
338+
339+
});
340+
/*describe('server-with-define-cli', function() {
341+
342+
var app = null;
343+
var args = null;
344+
345+
before(function (done) {
346+
args = {
347+
cwd : join(fixtures, 'define'),
348+
define: '{NAME:"cli",AGE:999,FLAG:true}',
349+
debug: true
350+
};
351+
process.chdir(args.cwd);
352+
var pkgFile = join(args.cwd, 'package.json');
353+
if (existsSync(pkgFile)) {
354+
args.pkg = JSON.parse(readFileSync(pkgFile, 'utf-8'));
355+
args.pkg.spm.hash = false;
356+
}
357+
sw.build.getWebpackOpts(args, function (err, webpackOpts) {
358+
var server = new Server(sw.webpack(webpackOpts), args);
359+
app = server.app;
360+
server.once('done', done);
361+
});
362+
});
363+
364+
it('get /a.js', function(done) {
365+
request(app.listen())
366+
.get('/a.js')
367+
.expect(function(res){
368+
if(res.text.indexOf('NAME') > -1 || res.text.indexOf('AGE') > -1 || res.text.indexOf('FLAG') > -1){
369+
throw new Error('define param failed');
370+
}else if(res.text.indexOf('console.log(("cli"), (999), (true));') === -1){
371+
throw new Error('define param to a wrong value');
372+
}
373+
})
374+
.end(function(err){
375+
if (err) return done(err);
376+
done();
377+
});
378+
});
379+
380+
});*/

0 commit comments

Comments
 (0)