diff --git a/.gitignore b/.gitignore index dfb86a5cdf..823ddf8da3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules /client/live.bundle.js /client/index.bundle.js +/client/sockjs.bundle.js diff --git a/client/sockjs.js b/client/sockjs.js new file mode 100644 index 0000000000..6bcc717efc --- /dev/null +++ b/client/sockjs.js @@ -0,0 +1 @@ +module.exports = require('sockjs-client'); diff --git a/client/webpack.sockjs.config.js b/client/webpack.sockjs.config.js new file mode 100644 index 0000000000..f41ce6cd26 --- /dev/null +++ b/client/webpack.sockjs.config.js @@ -0,0 +1,6 @@ +module.exports = { + output: { + library: "SockJS", + libraryTarget: "umd" + } +} diff --git a/lib/Server.js b/lib/Server.js index fb6bf8179f..ee2b62cc73 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -10,7 +10,6 @@ var https = require("https"); var httpProxyMiddleware = require("http-proxy-middleware"); var serveIndex = require("serve-index"); var historyApiFallback = require("connect-history-api-fallback"); -var pkg = require("../package.json"); function Server(compiler, options) { // Default options @@ -48,6 +47,10 @@ function Server(compiler, options) { var inlinedJs = new StreamCache(); fs.createReadStream(path.join(__dirname, "..", "client", "index.bundle.js")).pipe(inlinedJs); + // Prepare the sockjs js file + var sockjsJs = new StreamCache(); + fs.createReadStream(path.join(__dirname, "..", "client", "sockjs.bundle.js")).pipe(sockjsJs); + // Init express server var app = this.app = new express(); @@ -59,6 +62,11 @@ function Server(compiler, options) { liveJs.pipe(res); }); + app.get("/__webpack_dev_server__/sockjs.bundle.js", function(req, res) { + res.setHeader("Content-Type", "application/javascript"); + sockjsJs.pipe(res); + }); + app.get("/webpack-dev-server.js", function(req, res) { res.setHeader("Content-Type", "application/javascript"); inlinedJs.pipe(res); @@ -335,9 +343,8 @@ Server.prototype.setContentHeaders = function(req, res, next) { Server.prototype.listen = function() { var returnValue = this.listeningApp.listen.apply(this.listeningApp, arguments); var sockServer = sockjs.createServer({ - // The SockJS server package uses a version of the client script - // that doesn't match our version of the client script. - sockjs_url: 'https://cdn.jsdelivr.net/sockjs/' + pkg.dependencies['sockjs-client'] + '/sockjs.min.js', + // Use provided up-to-date sockjs-client + sockjs_url: "/__webpack_dev_server__/sockjs.bundle.js", // Limit useless logs log: function(severity, line) { if(severity === "error") { diff --git a/package.json b/package.json index c1b6152a14..58798aaba3 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,11 @@ "ssl/" ], "scripts": { - "prepublish": "webpack ./client/live.js client/live.bundle.js --color --config client/webpack.config.js -p && webpack ./client/index.js client/index.bundle.js --color --config client/webpack.config.js -p", - "lint": "eslint bin lib test examples client/{index,live,socket,webpack.config}.js", + "prepublish": "npm run -s client-live && npm run -s client-index && npm run -s client-sockjs", + "client-live": "webpack ./client/live.js client/live.bundle.js --color --config client/webpack.config.js -p", + "client-index": "webpack ./client/index.js client/index.bundle.js --color --config client/webpack.config.js -p", + "client-sockjs": "webpack ./client/sockjs.js client/sockjs.bundle.js --color --config client/webpack.sockjs.config.js -p", + "lint": "eslint bin lib test examples client/{index,live,socket,sockjs,webpack.config}.js", "beautify": "npm run lint -- --fix", "travis": "npm run lint && node lib/Server.js" }