UNPKG

2.83 kBJavaScriptView Raw
1#! /usr/bin/env node
2
3/* globals require, process, __dirname */
4
5'use strict';
6
7const SPECS_GLOB = '!(node_modules|jspm_packages)/**/*spec.js';
8
9let _ = require('lodash'),
10 glob = require('glob'),
11 path = require('path'),
12 express = require('express'),
13 http = require('http'),
14 program = require('commander'),
15 serveIndex = require('serve-index'),
16 webpack = require('webpack'),
17 webpackDevServer = require('webpack-dev-server');
18
19program
20 .usage('[options] <file ...>')
21 .option('--webpackConfig <webpackConfig>', 'webpackConfigLocation')
22 .option('--port <portNumber>', 'serve spec list on the specified local port number', parseInt, 5678)
23 .option('--webpackPort <webpackPort>', 'local webpack dev server port ', parseInt, 8080)
24 .parse(process.argv);
25
26if(!program.webpackConfig){
27 console.log('add a webpack config');
28 process.exit(1);
29}
30let webpackConfig = require(process.cwd() + '/' + program.webpackConfig);
31if(!webpackConfig){
32 console.log('missing webpack config');
33 process.exit(1);
34}
35
36
37let projectDir = path.resolve(process.cwd(), program.args && program.args.length > 0 ? program.args[0] : ''),
38 go = {cwd: projectDir},
39 projectName = projectDir.split(path.sep).pop(),
40 jasmineDir = `${process.cwd()}/node_modules/jasmine-core`,
41 webpackBaseUrl = `http://localhost:${program.webpackPort}/`,
42 webpackLiveReloadBaseUrl = `${webpackBaseUrl}webpack-dev-server/`;
43
44function getSpecs() {
45 return new Promise((res, rej) => {
46 glob(SPECS_GLOB, go, (err, files) => {
47 if (err) {
48 rej(err);
49 } else {
50 res(_.sortBy(_.map(_.filter(files, file => !_.includes(file, 'e2e')), file => ({
51 name: path.basename(file, '.js'),
52 path: file,
53 url: `${webpackLiveReloadBaseUrl}${file.toString().slice(0, -2)}html`,
54 debugUrl: `${webpackBaseUrl}${file.toString().slice(0, -2)}html`
55 })), 'name'));
56 }
57 });
58 });
59}
60
61let app = express();
62
63app.set('view engine', 'jade');
64app.set('views', `${__dirname}/views`);
65app.use('/jasmine', serveIndex(jasmineDir, {icons: true}));
66app.use('/jasmine', express.static(jasmineDir));
67
68app.get('/', (req, res) => {
69 getSpecs()
70 .then(specs => {
71 res.render('home', {
72 projectName,
73 specs
74 });
75 })
76 .catch(error => {
77 res.status(500).render('500', {error});
78 });
79});
80
81let compiler = webpack(webpackConfig);
82let server = new webpackDevServer(compiler, {
83 stats: {
84 colors: true
85 },
86 inline: true,
87 progress: false
88});
89server.listen(program.webpackPort);
90
91http
92 .createServer(app)
93 .listen(program.port, () => console.log(`HTTP server listening on port ${program.port}`));
\No newline at end of file