2

我目前正在尝试通过 boot2dockerwebpack-dev-server进行热加载

通过使用,我在容器中正确获取了文件更改docker-osx-dev,但 socket.io 热重载不起作用。

原因是我--host 0.0.0.0在运行服务器时进行了设置,以便可以在我的主机上访问它。然而,这意味着它正在寻找位于0.0.0.0.

因此,当我加载页面时,它会尝试连接到http://0.0.0.0:8080/socket.io/?EIO=3&transport=polling&t=1434584701670-0我的领事时出现错误。实际上它应该连接到http://dockerhost:8080/socket.io/.

有没有办法告诉webpack-dev-server使用不同的主机来获取 socket.io 连接?

Github issue 63可能涉及相同的问题,但尚未解决。

4

4 回答 4

1

所以我意识到,即使它在控制台中给我一个错误,通过尝试连接到错误的主机,它也连接到了正确的主机,所以热加载确实有效。

最后,我的配置看起来像这样:

var entry = ["./config/mainApp"];
var loaders = {
    "jsx": ["react-hot", "babel-loader?stage=0"]
    "js": {
        loader: "babel-loader?stage=0",
        include: path.join(__dirname, "app")
    },
    "json": "json-loader",
    "json5": "json5-loader",
    "txt": "raw-loader",
    "png|jpg|jpeg|gif|svg": "url-loader?limit=10000",
    "woff|woff2": "url-loader?limit=100000",
    "ttf|eot": "file-loader",
    "wav|mp3": "file-loader",
    "html": "html-loader",
    "md|markdown": ["html-loader", "markdown-loader"],
    "css": "style-loader!css-loader"
};
var preloaders = {
    "js": "source-map-loader"
};
var plugins = [
    new webpack.PrefetchPlugin("react"),
    new HtmlWebpackPlugin({
        inject: true,
        template: "app/index.html"
    }),
    new webpack.PrefetchPlugin("react/lib/ReactComponentBrowserEnvironment")
];
module.exports = {
    entry: entry,
    output: {
        path: path.join(__dirname, "dist"),
        filename: "bundle.js",
        sourceMapFilename: "bundle.map",
        pathinfo: true
    },
    module: {
        loaders: loadersByExtension(loaders),
        preloaders: loadersByExtension(preloaders)
    },
    devtool: "eval-source-map",
    debug: true,
    resolve: {
        root: path.join(__dirname, "app"),
        extensions: ["", ".web.js", ".js", ".jsx"]
    },
    plugins: plugins,
    devServer: {
        port: 8080,
        host: "0.0.0.0",
        inline: true
    }
};

我是这样开始的:

webpack-dev-server --config webpack-hot-dev-server.config.js --colors --progress --hot

有关完整示例,请查看我的应用程序的初始阶段,它只有这个样板 + 反应

于 2015-06-18T17:43:58.707 回答
1

切换到使用https://github.com/brikis98/docker-osx-dev,它使用 rsync 在 OS X 和容器之间同步文件,并为http://dockerhost允许的 socket.io 添加一个主机条目,以便从OS X 网络浏览器。

于 2015-07-19T04:41:25.460 回答
1

经过几个小时的搜索,我发现,该内联选项只是添加了入口点。您可以通过将 options.host(在您的情况下为 0.0.0.0)替换为 localhost 或其他主机来修复此错误。

检测文件更改的最简单方法是将watchOptions.poll设置为 true。

于 2015-07-31T16:25:07.190 回答
0

经过一番摸索,这里是解决方案:

1-将主机名添加到/etc/hosts

YOUR_DOCKER_MACHINE_IP    devapp (or any other hostname you choose)

2- 在您的 webpackconfig 条目中

entry: 
    main: [
        'webpack-dev-server/client?http://devapp:YOUR_EXPOSED_PORT',
        'webpack/hot/only-dev-server',
        YOUR_SCRIPT_FILE
    ]
}
于 2016-03-24T08:51:36.140 回答