├── .gitignore
├── .travis.yml
├── README.md
├── example
├── gulpfile.js
├── server.js
└── static
│ ├── index.html
│ └── style.css
├── index.js
├── package.json
├── scripts
└── static.js
└── test
└── index.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | .idea
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '0.10'
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | gulp-live-server
2 | ===
3 |
4 | [![status][1]][2] [![downloads][3]][4] [![tag][5]][6] [![license][7]][8]
5 |
6 | [1]: http://img.shields.io/travis/gimm/gulp-live-server/master.svg?style=flat-square
7 | [2]: https://travis-ci.org/gimm/gulp-live-server
8 |
9 | [3]: http://img.shields.io/npm/dm/gulp-live-server.svg?style=flat-square
10 | [4]: https://www.npmjs.com/package/gulp-live-server
11 |
12 | [5]: https://img.shields.io/github/tag/gimm/gulp-live-server.svg?style=flat-square
13 | [6]: https://github.com/gimm/gulp-live-server/releases
14 |
15 | [7]: http://img.shields.io/badge/license-WTFPL-blue.svg?style=flat-square
16 | [8]: http://www.wtfpl.net
17 |
18 | A handy, light-weight server you're going to love.
19 |
20 | - [Install](#install)
21 | - [Usage](#usage)
22 | - [API](#api)
23 | - [static](#staticfolder-port)
24 | - [new](#newscript)
25 | - [gls](#glsargs-options-livereload)
26 | - [start](#start)
27 | - [stop](#stop)
28 | - [notify](#notifyevent)
29 | - [livereload.js](#livereloadjs)
30 | - [Debug](#debug)
31 |
32 | Install
33 | ---
34 | [](https://nodei.co/npm/gulp-live-server/)
35 |
36 | Usage
37 | ---
38 | - Serve a static folder(`gls.script`<'scripts/static.js'> is used as server script)
39 |
40 | ```js
41 | var gulp = require('gulp');
42 | var gls = require('gulp-live-server');
43 | gulp.task('serve', function() {
44 | //1. serve with default settings
45 | var server = gls.static(); //equals to gls.static('public', 3000);
46 | server.start();
47 |
48 | //2. serve at custom port
49 | var server = gls.static('dist', 8888);
50 | server.start();
51 |
52 | //3. serve multi folders
53 | var server = gls.static(['dist', '.tmp']);
54 | server.start();
55 |
56 | //use gulp.watch to trigger server actions(notify, start or stop)
57 | gulp.watch(['static/**/*.css', 'static/**/*.html'], function (file) {
58 | server.notify.apply(server, [file]);
59 | });
60 | });
61 | ```
62 | - Serve with your own script file
63 |
64 | ```js
65 | gulp.task('serve', function() {
66 | //1. run your script as a server
67 | var server = gls.new('myapp.js');
68 | server.start();
69 |
70 | //2. run script with cwd args, e.g. the harmony flag
71 | var server = gls.new(['--harmony', 'myapp.js']);
72 | //this will achieve `node --harmony myapp.js`
73 | //you can access cwd args in `myapp.js` via `process.argv`
74 | server.start();
75 |
76 | //use gulp.watch to trigger server actions(notify, start or stop)
77 | gulp.watch(['static/**/*.css', 'static/**/*.html'], function (file) {
78 | server.notify.apply(server, [file]);
79 | });
80 | gulp.watch('myapp.js', server.start.bind(server)); //restart my server
81 |
82 | // Note: try wrapping in a function if getting an error like `TypeError: Bad argument at TypeError (native) at ChildProcess.spawn`
83 | gulp.watch('myapp.js', function() {
84 | server.start.bind(server)()
85 | });
86 | });
87 | ```
88 |
89 | - Customized serving with gls
90 |
91 | ```js
92 | gulp.task('serve', function() {
93 | //1. gls is the base for `static` and `new`
94 | var server = gls([gls.script, 'static', 8000]);
95 | //equals gls.new([gls.script, 'static', 8000]);
96 | //equals gls.static('static', 8000);
97 | server.start();
98 |
99 | //2. set running options for the server, e.g. NODE_ENV
100 | var server = gls('myapp.js', {env: {NODE_ENV: 'development'}});
101 | server.start();
102 |
103 | //3. customize livereload server, e.g. port number
104 | var server = gls('myapp.js', undefined, 12345);
105 | var promise = server.start();
106 | //optionally handle the server process exiting
107 | promise.then(function(result) {
108 | //log, exit, re-start, etc...
109 | });
110 |
111 | //4. start with coffee-script executable e.g. installed with npm
112 | var server = gls('myapp.coffee');
113 | server.start('node_modules/coffee-script/bin/coffee');
114 |
115 | //use gulp.watch to trigger server actions(notify, start or stop)
116 | gulp.watch(['static/**/*.css', 'static/**/*.html'], function (file) {
117 | server.notify.apply(server, [file]);
118 | });
119 | gulp.watch('myapp.js', server.start.bind(server)); //restart my server
120 |
121 | // Note: try wrapping in a function if getting an error like `TypeError: Bad argument at TypeError (native) at ChildProcess.spawn`
122 | gulp.watch('myapp.js', function() {
123 | server.start.bind(server)()
124 | });
125 | });
126 | ```
127 |
128 | API
129 | ---
130 | ### static([folder][, port])
131 | - `folder` - `String|Array` The folder(s) to serve.
132 | Use array of strings if there're multi folders to serve.
133 | If omitted, defaults to `public/`.
134 | - `port` - `Number` The port to listen on. Defaults to `3000`.
135 | - return [gls](#glsargs-options-livereload).
136 |
137 | Config new server using the [default server script](https://github.com/gimm/gulp-live-server/blob/master/scripts/static.js), to serve the given `folder` on the specified `port`.
138 |
139 | ### new(script)
140 | - `script` - `String` The script file to run.
141 | - return [gls](#glsargs-options-livereload).
142 |
143 | Config new server using the given `script`.
144 |
145 | ### gls(args[, options][, livereload])
146 | - `args` - `String|Array` The 2nd param for [ChildProcess.spawn](http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options).
147 | - `options` - `Object` The 3rd param for [ChildProcess.spawn](http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options),
148 | will be mixin into the default value:
149 |
150 | ```js
151 | options = {
152 | cwd: undefined
153 | }
154 | options.env = process.env;
155 | options.env.NODE_ENV = 'development';
156 | ```
157 | - `livereload` - `Boolean|Number|Object` The option for tiny-lr server. The default value is `35729`.
158 | - `false` - will disable tiny-lr livereload server.
159 | - `number` - treated as port number of livereload server.
160 | - `object` - used to create tiny-lr server new tinylr.Server(livereload);
161 |
162 | **`gls` here is a reference of `var gls = require('gulp-live-server')`**. It aims to assemble configuration for the server child process as well as the tiny-lr server.
163 | **`static` and `new` are just shortcuts for this.**
164 | Usually, `static` and `new` will serve you well, but you can get more customized server with `gls`.
165 |
166 | ### start([execPath])
167 | - `execPath` - `String` The executable that is used to start the server. If none is given the current node executable is used.
168 | - return [promise](https://github.com/kriskowal/q/wiki/API-Reference) from [Q](https://www.npmjs.com/package/q), resolved with the server process exits.
169 |
170 | Spawn a new child process based on the configuration.
171 | - use [`ChildProcess.spawn`](http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) to start a node process;
172 | - use [`tiny-lr`](https://github.com/mklabs/tiny-lr) provide livereload ability;
173 |
174 | ### stop()
175 | - return [promise](https://github.com/kriskowal/q/wiki/API-Reference) from [Q](https://www.npmjs.com/package/q)
176 |
177 | Stop the server.
178 |
179 | ### notify([event])
180 | - `event` - `Event` Event object passed along with [gulp.watch](https://github.com/gulpjs/gulp/blob/master/docs/API.md#cbevent).
181 | Optional when used with `pipe`.
182 |
183 | Tell livereload.js to reload the changed resource(s)
184 |
185 | livereload.js
186 | ---
187 | gulp-live-server comes with [tiny-lr](https://github.com/mklabs/tiny-lr/) built in, which works as a livereload server. `livereload.js` is **served** by `tiny-lr`, but in order to get it loaded with your page, you have 3 options( to **inject** `` into your page):
188 | - [LiveReload](https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei?hl=en) for Chrome;
189 | - Use [connect-livereload](https://github.com/intesso/connect-livereload) middleware;
190 | - Add [livereload.js](https://github.com/livereload/livereload-js) in your page manually;
191 |
192 | Usually, if `http://localhost:35729/livereload.js` is accessible, then your livereload server is ok, if you don't have the script tag for livereload.js in you page, you've problem with either your chrome plugin or the connect-livereload middle-ware as mentioned above.
193 |
194 | DEBUG
195 | ---
196 | If you want more output, set the `DEBUG` environment variables to `*` or `gulp-live-server`.
197 |
--------------------------------------------------------------------------------
/example/gulpfile.js:
--------------------------------------------------------------------------------
1 | var gulp = require('gulp');
2 | var gls = require('../index.js');
3 |
4 | gulp.task('static', function() {
5 | var server = gls.static('static', 8000);
6 | server.start();
7 | gulp.watch(['static/**/*.css', 'static/**/*.html'], function(file) {
8 | server.notify.apply(server, [file]);
9 | });
10 | });
11 |
12 | gulp.task('custom', function() {
13 | var server = gls('server.js');
14 | server.start().then(function(result) {
15 | console.log('Server exited with result:', result);
16 | process.exit(result.code);
17 | });
18 | gulp.watch(['static/**/*.css', 'static/**/*.html'], function(file) {
19 | server.notify.apply(server, [file]);
20 | });
21 | gulp.watch('server.js', server.start);
22 | });
23 |
--------------------------------------------------------------------------------
/example/server.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var app = require('connect')();
3 |
4 | app.use(require('connect-livereload')());
5 | app.use(require('serve-static')(path.join(__dirname, '/static')));
6 |
7 | var server = app.listen(3000, function () {
8 |
9 | var host = server.address().address;
10 | var port = server.address().port;
11 |
12 | console.log('custom server listening at http://%s:%s', host, port);
13 | });
--------------------------------------------------------------------------------
/example/static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |