UNPKG

5.15 kBJavaScriptView Raw
1#!/usr/bin/env node
2var path = require('path');
3var fs = require('fs');
4var assign = require('object-assign');
5var liveServer = require("./index");
6
7var 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
17var homeDir = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
18var configPath = path.join(homeDir, '.live-server.json');
19if (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
25for (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 // Will be modified later when cwd is known
59 opts.watch = arg.substring(8).split(",");
60 process.argv.splice(i, 1);
61 }
62 else if (arg.indexOf("--ignore=") > -1) {
63 // Will be modified later when cwd is known
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 // e.g. "--mount=/components:./node_modules" will be ['/components', '<process.cwd()>/node_modules']
104 // split only on the first ":", as the path may contain ":" as well (e.g. C:\file.txt)
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 // split only on the first ":", as the URL will contain ":" as well
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 // Hidden param for tests to exit automatically
155 setTimeout(liveServer.shutdown, 500);
156 process.argv.splice(i, 1);
157 }
158}
159
160// Patch paths
161var dir = opts.root = process.argv[2] || "";
162
163if (opts.watch) {
164 opts.watch = opts.watch.map(function(relativePath) {
165 return path.join(dir, relativePath);
166 });
167}
168if (opts.ignore) {
169 opts.ignore = opts.ignore.map(function(relativePath) {
170 return path.join(dir, relativePath);
171 });
172}
173
174liveServer.start(opts);