Webpack-dev-server 即使在显示捆绑有效消息后也没有捆绑

Webpack-dev-server not bundling even after showing bundle valid message

我已经使用 webpack 设置了一个基本的 React 应用程序,但我无法正确获取 webpack-dev-server 运行。

我已经全局安装 webpack-dev-server 并尝试 运行 命令 sudo webpack-dev-server --hot 因为需要热重载。

该项目似乎仅使用 webpack cmd 即可正常运行。它内置在我的构建文件夹中,我可以通过某些服务器让它工作,但它不能与 webpack-dev-server 一起工作。从终端可以清楚地看到构建过程已经完成并且没有抛出任何错误 [webpack: bundle is now VALID.] 并且它实际上正在正确观察因为在任何更改时它确实会触发构建过程但它并没有真正构建 [它没有”不服务我的 bundle.js]。我尝试更改整个配置,但仍然无法解决问题。

如果有人能提供帮助,我们将不胜感激。

以下是我的 webpack.config.js 文件。

var path = require('path');

module.exports = {
    devtool: '#inline-source-map"',

    watch: true,
    colors: true,
    progress: true,

    module: {
        loaders: [{
            loader: "babel",
            include: [
                path.resolve(__dirname, "src"),
            ],
            test: /\.jsx?$/,
            query: {
                plugins: ['transform-runtime'],
                presets: ['es2015', 'react', 'stage-0'],
            }
        }, {
            loader: 'style!css!sass',
            include: path.join(__dirname, 'src'),
            test: /\.scss$/
        }]
    },

    plugins: [],
    output: {
        path: path.join(__dirname, 'build/js'),
        publicPath: '/build/',
        filename: '[name].js'
    },
    entry: {
        bundle: [
            './src/index.js'
        ]
    },

    devServer: {
        contentBase: "./",
        inline: true,
        port: 8080
    },
};

webpack-dev-server 从内存中为您的 bundle.js 服务。当您 运行 它不会生成文件。所以 bundle.js 在这种情况下不作为文件存在。

如果您不想使用 bundle.js,例如优化它的大小或测试您的生产部署,请使用 webpack 命令使用 webpack 生成它并在生产模式下提供它。

我已经自己解决了这个问题。听起来很傻,但问题在于 output 对象下的 publicPath。它应该匹配 path 属性 而不仅仅是 /build/,即

output: {
    path: path.join(__dirname, 'build/js'),
    publicPath: '/build/js', // instead of publicPath: '/build/' 
    filename: '[name].js'
},

在我的例子中,我必须检查 webpack 在哪里提供文件。

你可以看到: http://localhost:8080/webpack-dev-server

然后我可以看到我的 bundle.js 路径 > http://localhost:8080/dist/bundle.js

之后我在 index.html <script src="/dist/bundle.js"></script>

中使用了那个 /dist/bundle.js

现在它会刷新任何文件更改。

dev-server把编译好的文件保存在内存中,我不能直接访问... 但!解决方案是你不需要访问它,在开发中(即使你 运行 你的项目在节点服务器或本地主机上)使用 localhost:8080 来访问你的页面,这就是 webpack-dev-server正在为您的页面提供服务,您可以感受到使用它的所有优势(实时重新加载!),但是!它不会编译您的 bundle.js,所以!在生产之前,你需要手动 运行 webpack build 命令,仅此而已!开发服务器无法编译您的 bundle.js 文件!祝你好运!

在我的例子中,我使用的是 VS Code,我不得不重新启动它。我注意到 vs code 有时会出错。您在配置文件中所做的更改(package.json、webpack.config.js 等)有时不会生效。因此,如果您遇到即使设置正确也无法正常工作的情况,只需重新启动 vs code。

我看不到任何与此相关的错误报告。所以这很奇怪。我认为如果您在多次构建项目后一段时间后更改其中一个配置文件,就会触发此错误。

如果这确实是正在发生的事情,那么它就是一个巨大的错误。我将尝试切换到 Visual Studio 而不是代码,看看是否仍然会发生这种情况。如果是,则可能是 webpack 的问题。

顺便说一句,从 Webpack v4 开始,可以将内存中的资产写入磁盘:

  devServer: {
    contentBase: "./",
    port: 8080,
    writeToDisk: true
  }

doc

请参考这个 - https://github.com/webpack/webpack-dev-server/issues/24 据此,webpack dev server 不再写入磁盘。因此,您将看不到构建文件。相反,它将从内存中提供。要让它工作,你必须设置正确的路径。 示例:在 index.html 中从 '/dist/main.js' 加载构建文件,因此在 webpack 配置文件中将 output.publicPath 设置为 '/dist/'