diff --git a/middleware.js b/middleware.js index f9b05d635..fc00d61cf 100644 --- a/middleware.js +++ b/middleware.js @@ -69,7 +69,12 @@ module.exports = function(compiler, options) { // server content var content = context.fs.readFileSync(filename); content = shared.handleRangeHeaders(content, req, res); - res.setHeader("Content-Type", mime.lookup(filename) + "; charset=UTF-8"); + var contentType = mime.lookup(filename); + // do not add charset to WebAssembly files, otherwise compileStreaming will fail in the client + if(!/\.wasm$/.test(filename)) { + contentType += "; charset=UTF-8"; + } + res.setHeader("Content-Type", contentType); res.setHeader("Content-Length", content.length); if(context.options.headers) { for(var name in context.options.headers) { diff --git a/package.json b/package.json index ff7a35d44..844445790 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "memory-fs": "~0.4.1", - "mime": "^1.4.1", + "mime": "^1.5.0", "path-is-absolute": "^1.0.0", "range-parser": "^1.0.3", "time-stamp": "^2.0.0" diff --git a/test/Server.test.js b/test/Server.test.js index bb604e658..ee90c0f29 100644 --- a/test/Server.test.js +++ b/test/Server.test.js @@ -190,6 +190,28 @@ describe("Server", function() { }); }); + describe("WebAssembly", function() { + before(function(done) { + app = express(); + var compiler = webpack(webpackConfig); + var instance = middleware(compiler, { + stats: "errors-only", + quiet: true + }); + app.use(instance); + listen = listenShorthand(done); + instance.fileSystem.writeFileSync("/hello.wasm", "welcome"); + }); + after(close); + + it("request to hello.wasm", function(done) { + request(app).get("/hello.wasm") + .expect("welcome") + .expect("Content-Type", "application/wasm") + .expect(200, done); + }); + }); + describe("MultiCompiler", function() { before(function(done) { app = express();