├── .gitignore ├── LICENCE ├── README.md ├── bin ├── reload.js └── usage.txt ├── browser.js ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | *.err -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Raynos. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # live-reload 2 | 3 | A live reload server & client 4 | 5 | ## Docs 6 | 7 | ``` 8 | Usage: 9 | 10 | live-reload [...] --port=somePort --delay=someDelay 11 | 12 | Runs a live-reload server on the port. It listens to changes 13 | on one or more paths and sends reload commands to any 14 | browser connected to it. 15 | 16 | If a delay is set then it will send the command once the 17 | file has changed and the delay has elapsed. This is 18 | useful if your changing many files at once and only 19 | want to reload say 1s after all files have been written 20 | to disk. 21 | 22 | To connect a browser to a live-reload server simply add 23 | to your page 24 | ``` 25 | 26 | ## Installation 27 | 28 | `npm install live-reload` 29 | 30 | ## Contributors 31 | 32 | - Raynos 33 | 34 | ## MIT Licenced 35 | -------------------------------------------------------------------------------- /bin/reload.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var argv = require("optimist").argv 4 | , path = require("path") 5 | , filed = require("filed") 6 | 7 | , Reload = require("..") 8 | 9 | , help = argv.help || argv.h 10 | 11 | if (help) { 12 | filed(path.join(__dirname, "usage.txt")).pipe(process.stdout) 13 | } else { 14 | Reload(argv) 15 | } 16 | 17 | -------------------------------------------------------------------------------- /bin/usage.txt: -------------------------------------------------------------------------------- 1 | Usage: 2 | 3 | live-reload [...] --port=somePort --delay=someDelay 4 | 5 | Runs a live-reload server on the port. It listens to changes 6 | on one or more paths and sends reload commands to any 7 | browser connected to it. 8 | 9 | If a delay is set then it will send the command once the 10 | file has changed and the delay has elapsed. This is 11 | useful if your changing many files at once and only 12 | want to reload say 1s after all files have been written 13 | to disk. 14 | 15 | To connect a browser to a live-reload server simply add 16 | to your page 17 | -------------------------------------------------------------------------------- /browser.js: -------------------------------------------------------------------------------- 1 | var reconnect = require("reconnect/shoe") 2 | 3 | module.exports = LiveReloadClient 4 | 5 | function LiveReloadClient(uri) { 6 | if (typeof uri === "number") { 7 | uri = "http://localhost:" + uri 8 | } 9 | 10 | reconnect(function (stream) { 11 | stream.on("data", ondata) 12 | }).connect(uri + "/shoe") 13 | } 14 | 15 | function ondata(data) { 16 | if (data === "reload") { 17 | document.location.reload() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var http = require("http") 2 | , shoe = require("shoe") 3 | , path = require("path") 4 | , watchr = require("watchr") 5 | , bundle = require("browserify-server") 6 | , openStreams = [] 7 | 8 | module.exports = LiveReloadServer 9 | 10 | function LiveReloadServer(options) { 11 | var server = http.createServer(serveText) 12 | , sock = shoe(handleStream) 13 | , paths = options._ || process.cwd() 14 | , filterIgnored = options.ignore || noop 15 | , delay = options.delay || 1000 16 | , port = options.port || 9090 17 | , timer 18 | , source = bundle(path.join(__dirname, "reload.js"), { 19 | body: "require('./browser.js')(" + port + ")" 20 | }) 21 | 22 | watchr.watch({ 23 | paths: paths 24 | , listener: reload 25 | , ignoreHiddenFiles: true 26 | , ignorePatterns: true 27 | }) 28 | 29 | sock.install(server, "/shoe") 30 | 31 | server.listen(port) 32 | 33 | console.log("live reload server listening on port", port 34 | , "reloading on files") 35 | 36 | 37 | function serveText(req, res) { 38 | res.setHeader("content-type", "application/javascript") 39 | res.end(source) 40 | } 41 | 42 | function handleStream(stream) { 43 | openStreams.push(stream) 44 | 45 | stream.on("end", remove) 46 | 47 | function remove() { 48 | var index = openStreams.indexOf(stream) 49 | if (index !== -1) { 50 | openStreams.splice(index, 1) 51 | } 52 | } 53 | } 54 | 55 | function reload(fileName) { 56 | if (timer) { 57 | clearTimeout(timer) 58 | } 59 | 60 | timer = setTimeout(function () { 61 | if (!filterIgnored(fileName)) { 62 | openStreams.forEach(sendMessage) 63 | } 64 | }, delay) 65 | } 66 | 67 | function sendMessage(stream) { 68 | stream && stream.write("reload") 69 | } 70 | } 71 | 72 | function noop() {} 73 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "live-reload", 3 | "version": "1.1.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "live-reload", 9 | "version": "1.1.1", 10 | "dependencies": { 11 | "browserify-server": "~2.0.3", 12 | "filed": "0.0.7", 13 | "hound": "~1.0.4", 14 | "optimist": "~0.3.4", 15 | "reconnect": "~0.1.3", 16 | "shoe": "0.0.15", 17 | "watchr": "~2.1.5" 18 | }, 19 | "bin": { 20 | "live-reload": "bin/reload.js" 21 | }, 22 | "devDependencies": {} 23 | }, 24 | "node_modules/backoff": { 25 | "version": "1.0.0", 26 | "resolved": "https://registry.npmjs.org/backoff/-/backoff-1.0.0.tgz", 27 | "integrity": "sha1-AJgveBWOxtA/mWk+wPtfeyrR4o4=", 28 | "engines": { 29 | "node": ">= 0.6" 30 | } 31 | }, 32 | "node_modules/bal-util": { 33 | "version": "1.13.13", 34 | "resolved": "https://registry.npmjs.org/bal-util/-/bal-util-1.13.13.tgz", 35 | "integrity": "sha1-YyxJUgo2fsWqhUaI4Qgn2bUZMl8=", 36 | "engines": { 37 | "node": ">=0.6.0" 38 | } 39 | }, 40 | "node_modules/Base64": { 41 | "version": "0.1.4", 42 | "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.1.4.tgz", 43 | "integrity": "sha1-6fbGvvVn/WNepBYqsU3TKedKpt4=" 44 | }, 45 | "node_modules/base64-js": { 46 | "version": "0.0.2", 47 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", 48 | "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=", 49 | "engines": { 50 | "node": ">= 0.4" 51 | } 52 | }, 53 | "node_modules/bops": { 54 | "version": "0.0.6", 55 | "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", 56 | "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=", 57 | "dependencies": { 58 | "base64-js": "0.0.2", 59 | "to-utf8": "0.0.1" 60 | } 61 | }, 62 | "node_modules/browserify": { 63 | "version": "1.16.8", 64 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-1.16.8.tgz", 65 | "integrity": "sha1-0zeIztuyZh6y73ePXiDe1p1FHwE=", 66 | "dependencies": { 67 | "buffer-browserify": "~0.0.1", 68 | "coffee-script": "1.x.x", 69 | "commondir": "~0.0.1", 70 | "crypto-browserify": "~0", 71 | "deputy": "~0.0.3", 72 | "detective": "~0.2.0", 73 | "http-browserify": "~0.1.1", 74 | "nub": "~0.0.0", 75 | "optimist": "~0.3.4", 76 | "resolve": "~0.2.0", 77 | "syntax-error": "~0.0.0", 78 | "vm-browserify": "~0.0.0" 79 | }, 80 | "bin": { 81 | "browserify": "bin/cmd.js" 82 | } 83 | }, 84 | "node_modules/browserify-server": { 85 | "version": "2.0.4", 86 | "resolved": "https://registry.npmjs.org/browserify-server/-/browserify-server-2.0.4.tgz", 87 | "integrity": "sha1-tkpfTquQv3ZBj5SSZk20H5xPeoY=", 88 | "dependencies": { 89 | "browserify": "~1.16.1", 90 | "ecstatic": "~0.1.6", 91 | "filed": "0.0.7", 92 | "optimist": "~0.3.4" 93 | }, 94 | "bin": { 95 | "browserify-server": "bin/browserify-server.js" 96 | } 97 | }, 98 | "node_modules/buffer-browserify": { 99 | "version": "0.0.5", 100 | "resolved": "https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.0.5.tgz", 101 | "integrity": "sha1-iqaGMciogpxqTufvmjrH8sMemD4=", 102 | "deprecated": "Package not maintained. Recent browserify uses https://github.com/feross/buffer", 103 | "dependencies": { 104 | "base64-js": "0.0.2" 105 | } 106 | }, 107 | "node_modules/coffee-script": { 108 | "version": "1.12.7", 109 | "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", 110 | "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", 111 | "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", 112 | "bin": { 113 | "cake": "bin/cake", 114 | "coffee": "bin/coffee" 115 | }, 116 | "engines": { 117 | "node": ">=0.8.0" 118 | } 119 | }, 120 | "node_modules/commondir": { 121 | "version": "0.0.2", 122 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.2.tgz", 123 | "integrity": "sha1-xJyIgMb+loRLs1Jd0ucxQFDDie4=" 124 | }, 125 | "node_modules/concat-stream": { 126 | "version": "1.0.1", 127 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", 128 | "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", 129 | "engines": [ 130 | "node >= 0.8.0" 131 | ], 132 | "dependencies": { 133 | "bops": "0.0.6" 134 | } 135 | }, 136 | "node_modules/crypto-browserify": { 137 | "version": "0.4.0", 138 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-0.4.0.tgz", 139 | "integrity": "sha1-JG9qM3uITJn/6L+whaGEruYMM/M=", 140 | "engines": { 141 | "node": "*" 142 | } 143 | }, 144 | "node_modules/deputy": { 145 | "version": "0.0.4", 146 | "resolved": "https://registry.npmjs.org/deputy/-/deputy-0.0.4.tgz", 147 | "integrity": "sha1-7cAKnvXFNSfEBTKFNMmXla2kHL8=", 148 | "dependencies": { 149 | "detective": "~0.2.0", 150 | "mkdirp": "~0.3.3" 151 | }, 152 | "engines": { 153 | "node": ">=0.4.0" 154 | } 155 | }, 156 | "node_modules/detective": { 157 | "version": "0.2.1", 158 | "resolved": "https://registry.npmjs.org/detective/-/detective-0.2.1.tgz", 159 | "integrity": "sha1-nOkmAf0iOBDClDKtA0+MYti4ZU8=", 160 | "dependencies": { 161 | "esprima": "~0.9.9" 162 | }, 163 | "engines": { 164 | "node": ">=0.6.0" 165 | } 166 | }, 167 | "node_modules/ecstatic": { 168 | "version": "0.1.7", 169 | "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-0.1.7.tgz", 170 | "integrity": "sha1-siEFaHicAp9hDqTgA5W7r2IgEDQ=", 171 | "deprecated": "This package is unmaintained and deprecated. See the GH Issue 259.", 172 | "dependencies": { 173 | "ent": "0.0.x", 174 | "mime": "1.2.5" 175 | }, 176 | "engines": { 177 | "node": "*" 178 | } 179 | }, 180 | "node_modules/ent": { 181 | "version": "0.0.7", 182 | "resolved": "https://registry.npmjs.org/ent/-/ent-0.0.7.tgz", 183 | "integrity": "sha1-g11Of556jUkhxpLpAQ7JdtpemUk=" 184 | }, 185 | "node_modules/esprima": { 186 | "version": "0.9.9", 187 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-0.9.9.tgz", 188 | "integrity": "sha1-G5CSXJddYy1ygpOcO7nDpCPDBJA=", 189 | "bin": { 190 | "esparse": "bin/esparse.js" 191 | }, 192 | "engines": { 193 | "node": ">=0.4.0" 194 | } 195 | }, 196 | "node_modules/faye-websocket": { 197 | "version": "0.4.4", 198 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", 199 | "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=", 200 | "engines": { 201 | "node": ">=0.4.0" 202 | } 203 | }, 204 | "node_modules/filed": { 205 | "version": "0.0.7", 206 | "resolved": "https://registry.npmjs.org/filed/-/filed-0.0.7.tgz", 207 | "integrity": "sha1-MIfsUx+5p4YApuyOCxBuLFdNl3M=", 208 | "engines": { 209 | "node": "*" 210 | } 211 | }, 212 | "node_modules/h": { 213 | "version": "0.1.0", 214 | "resolved": "https://registry.npmjs.org/h/-/h-0.1.0.tgz", 215 | "integrity": "sha1-JCEf4dnO8rNsro/4JVYG6hLs37U=" 216 | }, 217 | "node_modules/hound": { 218 | "version": "1.0.5", 219 | "resolved": "https://registry.npmjs.org/hound/-/hound-1.0.5.tgz", 220 | "integrity": "sha1-WbvTkiDrSlQd/04t40HW2vb4ook=", 221 | "engines": { 222 | "node": ">=0.7.1" 223 | } 224 | }, 225 | "node_modules/http-browserify": { 226 | "version": "0.1.14", 227 | "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-0.1.14.tgz", 228 | "integrity": "sha1-nIs/lAAiBFR8fL5Saa/i6mL3HH8=", 229 | "dependencies": { 230 | "Base64": "~0.1.2", 231 | "concat-stream": "~1.0.0" 232 | } 233 | }, 234 | "node_modules/indexof": { 235 | "version": "0.0.1", 236 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 237 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 238 | }, 239 | "node_modules/mime": { 240 | "version": "1.2.5", 241 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.5.tgz", 242 | "integrity": "sha1-nu0HMCKov14WyFZsaGe4gyv7+hM=", 243 | "engines": { 244 | "node": "*" 245 | } 246 | }, 247 | "node_modules/mkdirp": { 248 | "version": "0.3.5", 249 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", 250 | "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", 251 | "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)" 252 | }, 253 | "node_modules/node-uuid": { 254 | "version": "1.3.3", 255 | "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz", 256 | "integrity": "sha1-09tNe1aBDZ5AMjQnZigq8HORcps=", 257 | "deprecated": "Use uuid module instead", 258 | "engines": { 259 | "node": "*" 260 | } 261 | }, 262 | "node_modules/nub": { 263 | "version": "0.0.0", 264 | "resolved": "https://registry.npmjs.org/nub/-/nub-0.0.0.tgz", 265 | "integrity": "sha1-s2m9Mr3eZq9ZYFw7BSC8IZ3MwE8=", 266 | "engines": { 267 | "node": "*" 268 | } 269 | }, 270 | "node_modules/optimist": { 271 | "version": "0.3.7", 272 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", 273 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", 274 | "dependencies": { 275 | "wordwrap": "~0.0.2" 276 | } 277 | }, 278 | "node_modules/reconnect": { 279 | "version": "0.1.5", 280 | "resolved": "https://registry.npmjs.org/reconnect/-/reconnect-0.1.5.tgz", 281 | "integrity": "sha1-3/6iUtYb6/swLsFwzvc9LS52WPI=", 282 | "dependencies": { 283 | "backoff": "~1.0.0", 284 | "h": "~0.1.0", 285 | "shoe": "~0.0.7" 286 | } 287 | }, 288 | "node_modules/resolve": { 289 | "version": "0.2.8", 290 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.2.8.tgz", 291 | "integrity": "sha1-/bF9SrsOyvb4DWesA88pAIj2wNA=", 292 | "engines": { 293 | "node": ">=0.4.0" 294 | } 295 | }, 296 | "node_modules/shoe": { 297 | "version": "0.0.15", 298 | "resolved": "https://registry.npmjs.org/shoe/-/shoe-0.0.15.tgz", 299 | "integrity": "sha1-uu2PGn8I9TC2bwkUKH/KplsSRDo=", 300 | "bundleDependencies": [ 301 | "sockjs-client" 302 | ], 303 | "dependencies": { 304 | "sockjs": "0.3.7" 305 | } 306 | }, 307 | "node_modules/shoe/node_modules/sockjs-client": { 308 | "version": "0.0.0-unreleasable", 309 | "extraneous": true, 310 | "inBundle": true 311 | }, 312 | "node_modules/sockjs": { 313 | "version": "0.3.7", 314 | "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.7.tgz", 315 | "integrity": "sha1-KVDgWG2KnTBElYqDGt5o2xl3Scs=", 316 | "dependencies": { 317 | "faye-websocket": "0.4.4", 318 | "node-uuid": "1.3.3" 319 | } 320 | }, 321 | "node_modules/syntax-error": { 322 | "version": "0.0.1", 323 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-0.0.1.tgz", 324 | "integrity": "sha1-AZ0HU0jNjFt58GA8c+U4kafFI10=", 325 | "dependencies": { 326 | "esprima": "~0.9.9" 327 | } 328 | }, 329 | "node_modules/to-utf8": { 330 | "version": "0.0.1", 331 | "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", 332 | "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=" 333 | }, 334 | "node_modules/vm-browserify": { 335 | "version": "0.0.4", 336 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", 337 | "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", 338 | "dependencies": { 339 | "indexof": "0.0.1" 340 | } 341 | }, 342 | "node_modules/watchr": { 343 | "version": "2.1.6", 344 | "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.1.6.tgz", 345 | "integrity": "sha1-bciVv2yVq29eBtgRlIsyCphBOJE=", 346 | "dependencies": { 347 | "bal-util": "1.13.x" 348 | }, 349 | "bin": { 350 | "watchr": "bin/watchr" 351 | }, 352 | "engines": { 353 | "node": ">=0.4.0" 354 | } 355 | }, 356 | "node_modules/wordwrap": { 357 | "version": "0.0.3", 358 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 359 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 360 | "engines": { 361 | "node": ">=0.4.0" 362 | } 363 | } 364 | }, 365 | "dependencies": { 366 | "backoff": { 367 | "version": "1.0.0", 368 | "resolved": "https://registry.npmjs.org/backoff/-/backoff-1.0.0.tgz", 369 | "integrity": "sha1-AJgveBWOxtA/mWk+wPtfeyrR4o4=" 370 | }, 371 | "bal-util": { 372 | "version": "1.13.13", 373 | "resolved": "https://registry.npmjs.org/bal-util/-/bal-util-1.13.13.tgz", 374 | "integrity": "sha1-YyxJUgo2fsWqhUaI4Qgn2bUZMl8=" 375 | }, 376 | "Base64": { 377 | "version": "0.1.4", 378 | "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.1.4.tgz", 379 | "integrity": "sha1-6fbGvvVn/WNepBYqsU3TKedKpt4=" 380 | }, 381 | "base64-js": { 382 | "version": "0.0.2", 383 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", 384 | "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=" 385 | }, 386 | "bops": { 387 | "version": "0.0.6", 388 | "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", 389 | "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=", 390 | "requires": { 391 | "base64-js": "0.0.2", 392 | "to-utf8": "0.0.1" 393 | } 394 | }, 395 | "browserify": { 396 | "version": "1.16.8", 397 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-1.16.8.tgz", 398 | "integrity": "sha1-0zeIztuyZh6y73ePXiDe1p1FHwE=", 399 | "requires": { 400 | "buffer-browserify": "~0.0.1", 401 | "coffee-script": "1.x.x", 402 | "commondir": "~0.0.1", 403 | "crypto-browserify": "~0", 404 | "deputy": "~0.0.3", 405 | "detective": "~0.2.0", 406 | "http-browserify": "~0.1.1", 407 | "nub": "~0.0.0", 408 | "optimist": "~0.3.4", 409 | "resolve": "~0.2.0", 410 | "syntax-error": "~0.0.0", 411 | "vm-browserify": "~0.0.0" 412 | } 413 | }, 414 | "browserify-server": { 415 | "version": "2.0.4", 416 | "resolved": "https://registry.npmjs.org/browserify-server/-/browserify-server-2.0.4.tgz", 417 | "integrity": "sha1-tkpfTquQv3ZBj5SSZk20H5xPeoY=", 418 | "requires": { 419 | "browserify": "~1.16.1", 420 | "ecstatic": "~0.1.6", 421 | "filed": "0.0.7", 422 | "optimist": "~0.3.4" 423 | } 424 | }, 425 | "buffer-browserify": { 426 | "version": "0.0.5", 427 | "resolved": "https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.0.5.tgz", 428 | "integrity": "sha1-iqaGMciogpxqTufvmjrH8sMemD4=", 429 | "requires": { 430 | "base64-js": "0.0.2" 431 | } 432 | }, 433 | "coffee-script": { 434 | "version": "1.12.7", 435 | "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", 436 | "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" 437 | }, 438 | "commondir": { 439 | "version": "0.0.2", 440 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.2.tgz", 441 | "integrity": "sha1-xJyIgMb+loRLs1Jd0ucxQFDDie4=" 442 | }, 443 | "concat-stream": { 444 | "version": "1.0.1", 445 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", 446 | "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", 447 | "requires": { 448 | "bops": "0.0.6" 449 | } 450 | }, 451 | "crypto-browserify": { 452 | "version": "0.4.0", 453 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-0.4.0.tgz", 454 | "integrity": "sha1-JG9qM3uITJn/6L+whaGEruYMM/M=" 455 | }, 456 | "deputy": { 457 | "version": "0.0.4", 458 | "resolved": "https://registry.npmjs.org/deputy/-/deputy-0.0.4.tgz", 459 | "integrity": "sha1-7cAKnvXFNSfEBTKFNMmXla2kHL8=", 460 | "requires": { 461 | "detective": "~0.2.0", 462 | "mkdirp": "~0.3.3" 463 | } 464 | }, 465 | "detective": { 466 | "version": "0.2.1", 467 | "resolved": "https://registry.npmjs.org/detective/-/detective-0.2.1.tgz", 468 | "integrity": "sha1-nOkmAf0iOBDClDKtA0+MYti4ZU8=", 469 | "requires": { 470 | "esprima": "~0.9.9" 471 | } 472 | }, 473 | "ecstatic": { 474 | "version": "0.1.7", 475 | "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-0.1.7.tgz", 476 | "integrity": "sha1-siEFaHicAp9hDqTgA5W7r2IgEDQ=", 477 | "requires": { 478 | "ent": "0.0.x", 479 | "mime": "1.2.5" 480 | } 481 | }, 482 | "ent": { 483 | "version": "0.0.7", 484 | "resolved": "https://registry.npmjs.org/ent/-/ent-0.0.7.tgz", 485 | "integrity": "sha1-g11Of556jUkhxpLpAQ7JdtpemUk=" 486 | }, 487 | "esprima": { 488 | "version": "0.9.9", 489 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-0.9.9.tgz", 490 | "integrity": "sha1-G5CSXJddYy1ygpOcO7nDpCPDBJA=" 491 | }, 492 | "faye-websocket": { 493 | "version": "0.4.4", 494 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", 495 | "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=" 496 | }, 497 | "filed": { 498 | "version": "0.0.7", 499 | "resolved": "https://registry.npmjs.org/filed/-/filed-0.0.7.tgz", 500 | "integrity": "sha1-MIfsUx+5p4YApuyOCxBuLFdNl3M=" 501 | }, 502 | "h": { 503 | "version": "0.1.0", 504 | "resolved": "https://registry.npmjs.org/h/-/h-0.1.0.tgz", 505 | "integrity": "sha1-JCEf4dnO8rNsro/4JVYG6hLs37U=" 506 | }, 507 | "hound": { 508 | "version": "1.0.5", 509 | "resolved": "https://registry.npmjs.org/hound/-/hound-1.0.5.tgz", 510 | "integrity": "sha1-WbvTkiDrSlQd/04t40HW2vb4ook=" 511 | }, 512 | "http-browserify": { 513 | "version": "0.1.14", 514 | "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-0.1.14.tgz", 515 | "integrity": "sha1-nIs/lAAiBFR8fL5Saa/i6mL3HH8=", 516 | "requires": { 517 | "Base64": "~0.1.2", 518 | "concat-stream": "~1.0.0" 519 | } 520 | }, 521 | "indexof": { 522 | "version": "0.0.1", 523 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 524 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 525 | }, 526 | "mime": { 527 | "version": "1.2.5", 528 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.5.tgz", 529 | "integrity": "sha1-nu0HMCKov14WyFZsaGe4gyv7+hM=" 530 | }, 531 | "mkdirp": { 532 | "version": "0.3.5", 533 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", 534 | "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" 535 | }, 536 | "node-uuid": { 537 | "version": "1.3.3", 538 | "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz", 539 | "integrity": "sha1-09tNe1aBDZ5AMjQnZigq8HORcps=" 540 | }, 541 | "nub": { 542 | "version": "0.0.0", 543 | "resolved": "https://registry.npmjs.org/nub/-/nub-0.0.0.tgz", 544 | "integrity": "sha1-s2m9Mr3eZq9ZYFw7BSC8IZ3MwE8=" 545 | }, 546 | "optimist": { 547 | "version": "0.3.7", 548 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", 549 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", 550 | "requires": { 551 | "wordwrap": "~0.0.2" 552 | } 553 | }, 554 | "reconnect": { 555 | "version": "0.1.5", 556 | "resolved": "https://registry.npmjs.org/reconnect/-/reconnect-0.1.5.tgz", 557 | "integrity": "sha1-3/6iUtYb6/swLsFwzvc9LS52WPI=", 558 | "requires": { 559 | "backoff": "~1.0.0", 560 | "h": "~0.1.0", 561 | "shoe": "~0.0.7" 562 | } 563 | }, 564 | "resolve": { 565 | "version": "0.2.8", 566 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.2.8.tgz", 567 | "integrity": "sha1-/bF9SrsOyvb4DWesA88pAIj2wNA=" 568 | }, 569 | "shoe": { 570 | "version": "0.0.15", 571 | "resolved": "https://registry.npmjs.org/shoe/-/shoe-0.0.15.tgz", 572 | "integrity": "sha1-uu2PGn8I9TC2bwkUKH/KplsSRDo=", 573 | "requires": { 574 | "sockjs": "0.3.7" 575 | }, 576 | "dependencies": { 577 | "sockjs-client": { 578 | "version": "0.0.0-unreleasable", 579 | "bundled": true, 580 | "extraneous": true 581 | } 582 | } 583 | }, 584 | "sockjs": { 585 | "version": "0.3.7", 586 | "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.7.tgz", 587 | "integrity": "sha1-KVDgWG2KnTBElYqDGt5o2xl3Scs=", 588 | "requires": { 589 | "faye-websocket": "0.4.4", 590 | "node-uuid": "1.3.3" 591 | } 592 | }, 593 | "syntax-error": { 594 | "version": "0.0.1", 595 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-0.0.1.tgz", 596 | "integrity": "sha1-AZ0HU0jNjFt58GA8c+U4kafFI10=", 597 | "requires": { 598 | "esprima": "~0.9.9" 599 | } 600 | }, 601 | "to-utf8": { 602 | "version": "0.0.1", 603 | "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", 604 | "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=" 605 | }, 606 | "vm-browserify": { 607 | "version": "0.0.4", 608 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", 609 | "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", 610 | "requires": { 611 | "indexof": "0.0.1" 612 | } 613 | }, 614 | "watchr": { 615 | "version": "2.1.6", 616 | "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.1.6.tgz", 617 | "integrity": "sha1-bciVv2yVq29eBtgRlIsyCphBOJE=", 618 | "requires": { 619 | "bal-util": "1.13.x" 620 | } 621 | }, 622 | "wordwrap": { 623 | "version": "0.0.3", 624 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 625 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 626 | } 627 | } 628 | } 629 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "live-reload", 3 | "version": "1.1.1", 4 | "description": "A live reload server & client", 5 | "keywords": [], 6 | "author": "Raynos ", 7 | "repository": "git://github.com/Raynos/live-reload.git", 8 | "main": "index", 9 | "homepage": "https://github.com/Raynos/live-reload", 10 | "browserify": "browser.js", 11 | "contributors": [ 12 | { 13 | "name": "Jake Verbaten" 14 | } 15 | ], 16 | "bugs": { 17 | "url": "https://github.com/Raynos/live-reload/issues", 18 | "email": "raynos2@gmail.com" 19 | }, 20 | "dependencies": { 21 | "shoe": "0.0.15", 22 | "hound": "~1.0.4", 23 | "reconnect": "~0.1.3", 24 | "optimist": "~0.3.4", 25 | "watchr": "~2.1.5", 26 | "browserify-server": "~2.0.3", 27 | "filed": "0.0.7" 28 | }, 29 | "devDependencies": {}, 30 | "licenses": [ 31 | { 32 | "type": "MIT", 33 | "url": "http://github.com/Raynos/live-reload/raw/master/LICENSE" 34 | } 35 | ], 36 | "scripts": {}, 37 | "bin": { 38 | "live-reload": "bin/reload.js" 39 | } 40 | } 41 | --------------------------------------------------------------------------------