diff --git a/lib/async-tasks.js b/lib/async-tasks.js index 208ebe729..fa337fa64 100644 --- a/lib/async-tasks.js +++ b/lib/async-tasks.js @@ -37,6 +37,10 @@ module.exports = [ step: "Starting the Server", fn: async.startServer }, + { + step: "Adding serve static middlewares", + fn: async.addServeStaticMiddleware + }, { step: "Starting the HTTPS Tunnel", fn: async.startTunnel diff --git a/lib/async.js b/lib/async.js index ef1028ff4..5336daa5a 100644 --- a/lib/async.js +++ b/lib/async.js @@ -182,6 +182,18 @@ module.exports = { } }); }, + /** + * @param bs + * @param done + */ + addServeStaticMiddleware: function (bs, done) { + bs.options + .get("serveStatic") + .forEach(function (dir) { + bs.addMiddleware("*", utils.serveStatic(dir)); + }); + done(); + }, /** * @param {BrowserSync} bs * @param {Function} done diff --git a/lib/default-config.js b/lib/default-config.js index 2c6176070..7d59d72d9 100644 --- a/lib/default-config.js +++ b/lib/default-config.js @@ -87,6 +87,12 @@ module.exports = { middleware: false, + /** + * Add additional directories from which static + * files should be served. + */ + serveStatic: [], + /** * Enable https for localhost development. **Note** - this is not needed for proxy * option as it will be inferred from your target url. diff --git a/package.json b/package.json index b380accde..fb9b4d2fe 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "browser-sync", "description": "Live CSS Reload & Browser Syncing", - "version": "2.7.13", + "version": "2.8.0", "homepage": "http://www.browsersync.io/", "author": { "name": "Shane Osbourne" diff --git a/test/specs/e2e/e2e.options.serveStatic.js b/test/specs/e2e/e2e.options.serveStatic.js new file mode 100644 index 000000000..737db1f07 --- /dev/null +++ b/test/specs/e2e/e2e.options.serveStatic.js @@ -0,0 +1,36 @@ +"use strict"; + +var browserSync = require("../../../index"); + +var request = require("supertest"); +var assert = require("chai").assert; +var page = require("fs").readFileSync("test/fixtures/index.html", "utf-8"); + +describe("E2E `serveStatic` option", function () { + + var bs; + + before(function (done) { + browserSync.reset(); + var config = { + logLevel: "silent", + online: false, + serveStatic: ["test/fixtures"] + }; + bs = browserSync(config, done).instance; + }); + + after(function () { + bs.cleanup(); + }); + + it("can serve static files regardless of running mode", function (done) { + request(bs.server) + .get("/index.html") + .expect(200) + .end(function (err, res) { + assert.equal(res.text, page); + done(); + }); + }); +});