1 | #!/usr/bin/env node
|
2 | var path = require('path');
|
3 | var fs = require('fs');
|
4 | var assign = require('object-assign');
|
5 | var liveServer = require("./index");
|
6 |
|
7 | var opts = {
|
8 | host: process.env.IP,
|
9 | port: process.env.PORT,
|
10 | open: true,
|
11 | mount: [],
|
12 | proxy: [],
|
13 | middleware: [],
|
14 | logLevel: 2,
|
15 | };
|
16 |
|
17 | var homeDir = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
|
18 | var configPath = path.join(homeDir, '.live-server.json');
|
19 | if (fs.existsSync(configPath)) {
|
20 | var userConfig = fs.readFileSync(configPath, 'utf8');
|
21 | assign(opts, JSON.parse(userConfig));
|
22 | if (opts.ignorePattern) opts.ignorePattern = new RegExp(opts.ignorePattern);
|
23 | }
|
24 |
|
25 | for (var i = process.argv.length - 1; i >= 2; --i) {
|
26 | var arg = process.argv[i];
|
27 | if (arg.indexOf("--port=") > -1) {
|
28 | var portString = arg.substring(7);
|
29 | var portNumber = parseInt(portString, 10);
|
30 | if (portNumber === +portString) {
|
31 | opts.port = portNumber;
|
32 | process.argv.splice(i, 1);
|
33 | }
|
34 | }
|
35 | else if (arg.indexOf("--host=") > -1) {
|
36 | opts.host = arg.substring(7);
|
37 | process.argv.splice(i, 1);
|
38 | }
|
39 | else if (arg.indexOf("--open=") > -1) {
|
40 | var open = arg.substring(7);
|
41 | if (open.indexOf('/') !== 0) {
|
42 | open = '/' + open;
|
43 | }
|
44 | switch (typeof opts.open) {
|
45 | case "boolean":
|
46 | opts.open = open;
|
47 | break;
|
48 | case "string":
|
49 | opts.open = [opts.open, open];
|
50 | break;
|
51 | case "object":
|
52 | opts.open.push(open);
|
53 | break;
|
54 | }
|
55 | process.argv.splice(i, 1);
|
56 | }
|
57 | else if (arg.indexOf("--watch=") > -1) {
|
58 |
|
59 | opts.watch = arg.substring(8).split(",");
|
60 | process.argv.splice(i, 1);
|
61 | }
|
62 | else if (arg.indexOf("--ignore=") > -1) {
|
63 |
|
64 | opts.ignore = arg.substring(9).split(",");
|
65 | process.argv.splice(i, 1);
|
66 | }
|
67 | else if (arg.indexOf("--ignorePattern=") > -1) {
|
68 | opts.ignorePattern = new RegExp(arg.substring(16));
|
69 | process.argv.splice(i, 1);
|
70 | }
|
71 | else if (arg === "--no-css-inject") {
|
72 | opts.noCssInject = true;
|
73 | process.argv.splice(i, 1);
|
74 | }
|
75 | else if (arg === "--no-browser") {
|
76 | opts.open = false;
|
77 | process.argv.splice(i, 1);
|
78 | }
|
79 | else if (arg.indexOf("--browser=") > -1) {
|
80 | opts.browser = arg.substring(10).split(",");
|
81 | process.argv.splice(i, 1);
|
82 | }
|
83 | else if (arg.indexOf("--entry-file=") > -1) {
|
84 | var file = arg.substring(13);
|
85 | if (file.length) {
|
86 | opts.file = file;
|
87 | process.argv.splice(i, 1);
|
88 | }
|
89 | }
|
90 | else if (arg === "--spa") {
|
91 | opts.middleware.push("spa");
|
92 | process.argv.splice(i, 1);
|
93 | }
|
94 | else if (arg === "--quiet" || arg === "-q") {
|
95 | opts.logLevel = 0;
|
96 | process.argv.splice(i, 1);
|
97 | }
|
98 | else if (arg === "--verbose" || arg === "-V") {
|
99 | opts.logLevel = 3;
|
100 | process.argv.splice(i, 1);
|
101 | }
|
102 | else if (arg.indexOf("--mount=") > -1) {
|
103 |
|
104 |
|
105 | var match = arg.substring(8).match(/([^:]+):(.+)$/);
|
106 | match[2] = path.resolve(process.cwd(), match[2]);
|
107 | opts.mount.push([ match[1], match[2] ]);
|
108 | process.argv.splice(i, 1);
|
109 | }
|
110 | else if (arg.indexOf("--wait=") > -1) {
|
111 | var waitString = arg.substring(7);
|
112 | var waitNumber = parseInt(waitString, 10);
|
113 | if (waitNumber === +waitString) {
|
114 | opts.wait = waitNumber;
|
115 | process.argv.splice(i, 1);
|
116 | }
|
117 | }
|
118 | else if (arg === "--version" || arg === "-v") {
|
119 | var packageJson = require('./package.json');
|
120 | console.log(packageJson.name, packageJson.version);
|
121 | process.exit();
|
122 | }
|
123 | else if (arg.indexOf("--htpasswd=") > -1) {
|
124 | opts.htpasswd = arg.substring(11);
|
125 | process.argv.splice(i, 1);
|
126 | }
|
127 | else if (arg === "--cors") {
|
128 | opts.cors = true;
|
129 | process.argv.splice(i, 1);
|
130 | }
|
131 | else if (arg.indexOf("--https=") > -1) {
|
132 | opts.https = arg.substring(8);
|
133 | process.argv.splice(i, 1);
|
134 | }
|
135 | else if (arg.indexOf("--https-module=") > -1) {
|
136 | opts.httpsModule = arg.substring(15);
|
137 | process.argv.splice(i, 1);
|
138 | }
|
139 | else if (arg.indexOf("--proxy=") > -1) {
|
140 |
|
141 | var match = arg.substring(8).match(/([^:]+):(.+)$/);
|
142 | opts.proxy.push([ match[1], match[2] ]);
|
143 | process.argv.splice(i, 1);
|
144 | }
|
145 | else if (arg.indexOf("--middleware=") > -1) {
|
146 | opts.middleware.push(arg.substring(13));
|
147 | process.argv.splice(i, 1);
|
148 | }
|
149 | else if (arg === "--help" || arg === "-h") {
|
150 | console.log('Usage: live-server [-v|--version] [-h|--help] [-q|--quiet] [--port=PORT] [--host=HOST] [--open=PATH] [--no-browser] [--browser=BROWSER] [--ignore=PATH] [--ignorePattern=RGXP] [--no-css-inject] [--entry-file=PATH] [--spa] [--mount=ROUTE:PATH] [--wait=MILLISECONDS] [--htpasswd=PATH] [--cors] [--https=PATH] [--https-module=MODULE_NAME] [--proxy=PATH] [PATH]');
|
151 | process.exit();
|
152 | }
|
153 | else if (arg === "--test") {
|
154 |
|
155 | setTimeout(liveServer.shutdown, 500);
|
156 | process.argv.splice(i, 1);
|
157 | }
|
158 | }
|
159 |
|
160 |
|
161 | var dir = opts.root = process.argv[2] || "";
|
162 |
|
163 | if (opts.watch) {
|
164 | opts.watch = opts.watch.map(function(relativePath) {
|
165 | return path.join(dir, relativePath);
|
166 | });
|
167 | }
|
168 | if (opts.ignore) {
|
169 | opts.ignore = opts.ignore.map(function(relativePath) {
|
170 | return path.join(dir, relativePath);
|
171 | });
|
172 | }
|
173 |
|
174 | liveServer.start(opts);
|