【问题标题】:Webpack dev server cannot getWebpack 开发服务器无法获取
【发布时间】:2018-04-16 12:46:11
【问题描述】:

我正在使用 Webpack-4。当前的行为是,当 webpack-dev-server 运行时,/build 下的文件根本不会更新,而是显示文件目录。

如果我删除 /build 下的文件,webpack-dev-server 将无法获取 /。我想,它应该从内存中加载它们。

const HtmlWebPackPlugin = require("html-webpack-plugin");
const htmlPlugin = new HtmlWebPackPlugin({
   template: "./src/index.html",
   filename: "./index.html"
});

const path = require('path');

module.exports = {
output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'build/'),
},

module: {
    rules: [{
            test: /\.(js|jsx)$/,
            exclude: /node_modules/,
            use: {
                loader: "babel-loader",
                options: {
                    presets: ["env","react"]
                }
            }
        },
        { 
            test: /\.html$/,
            use: [{
                loader: "html-loader",
                options: {
                    minimize: true
                }
            }]
        }
    ]
},
plugins: [
    htmlPlugin
],
devServer: {       
    contentBase: "./build/",
    port: 5555
}
}

【问题讨论】:

  • 请在module.exports(输出配置上方)中定义入口点(入口:'./main.js',)
  • Webpack 4 有一个默认入口 /src/index.js

标签: webpack webpack-dev-server


【解决方案1】:

帮助我理解和调试本地 webpack-dev-server 配置的一些技巧:

  1. 要查看 webpack-dev-server 提供文件的位置(内存中), 在浏览器中输入http://localhost:{yourport}/webpack-dev-server。那么你就可以 单击其中一个文件(链接),它将向您显示它所服务的路线 文件的来源和内容。
  2. 当您启动 webpack-dev-server(即使用 npm start)时,它会在控制台中根据您的 webpack.config.js 文件向您显示它提供内容的位置。 (详细解释见下文)
  3. 如果您想要热重载(我不明白为什么不这样做),您需要在命令行(在您的 package.json 启动脚本中)而不是在配置文件中指定它。出于某种原因,将其放入配置文件不起作用。所以使用类似的东西:

package.json

"scripts": {
    "start": "webpack-dev-server --config webpack.config.js --hot --inline"
},

webpack.config.js 配置

...
output: {
    filename: '[name].bundle.js',
    path: path.join(__dirname, 'public', 'scripts'),
},
...
devServer: {
    contentBase: path.join(__dirname, "public"),
    publicPath: 'http://localhost:8080/scripts/',
    port: 8080
},
...

输出

 i 「wds」: Project is running at http://localhost:8080/    
 i 「wds」: webpack output is served from http://localhost:8080/scripts/
 i 「wds」: Content not from webpack is served from C:\Workspace\WebSite\public

在输出的第 2 行,请注意由于配置中的contentBasehttp://localhost:8080/scripts/ 实际上指向磁盘上的C:\Workspace\WebSite\public\scripts。 (这也是 webpack 放置文件的地方 :) !!!)

publicPath 配置中,尾部反斜杠很重要。

【讨论】:

  • 非常感谢您的回答!几个小时的搜索和问题来自publicPath 是通过使用path.resolve('./dist') 设置的,这是应用程序内的绝对路径。这就是浏览器看不到编译后的样式/脚本的原因。此答案应标记为完整答案!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
相关资源
最近更新 更多