【问题标题】:Webpack-dev-server not using the template in the HtmlWebpackPlugin optionsWebpack-dev-server 未使用 HtmlWebpackPlugin 选项中的模板
【发布时间】:2020-07-28 20:22:08
【问题描述】:

*编辑:示例(希望)更清楚。


我确定这里有一些简单的东西我错过了,但我看不到它......

我使用一个 HtmlWebPlugin 实例,每个页面/入口点都有一个模板。当我使用 webpack-dev-server 时,只有第一个实例实际上尊重模板中的内容,其余的只使用简单的 html 和元标记

将文件写入磁盘,无论是通过使用带有 dev-server 的 WriteFilePlugin,还是通过在没有 dev-server 的情况下简单地构建文件,都可以正确使用模板。我被难住了。

预期: about.html/index.html 这是我使用 write-file-webpack-plugin 和运行 'webpack --config webpack.config.js' 得到的结果。 Index.html 是相同的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>About</title>
</head>
<body>
    <p>About</p>
</body>
</html>

来自 Webpack-dev-server 的实际输出:(查看页面源代码)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
    </head>
    <body>
        <script type="text/javascript" charset="utf-8" src="/about.js"></script>
    </body>

</html>

配置:

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const WriteFilePlugin = require('write-file-webpack-plugin');
const path = require('path');

module.exports = {
    entry: {
        index: './src/js/index.js',
        about: './src/js/about.js'
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].js'
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.html$/,
                use: 'html-loader'
            }
        ]
    },
    devServer: {
        openPage: 'about'
    },
    plugins: [
        new WriteFilePlugin(),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'src/index.ejs',
            chunks: ['index']
        }),
        new HtmlWebpackPlugin({
            filename: 'about.html',
            template: 'src/about.ejs',
            chunks: ['about']
        }),
    ]
};

我看不出有什么明显的错误,但是我是多页面和 webpack 的新手

谢谢

**编辑:鉴于写入磁盘的文件很好,感觉可能是 wds 从哪里提供文件或我要导航到哪里的问题? localhost:8080 => html 和脚本链接在那里。 localhost:8080/index => 脚本链接,但模板中没有 html。 localhost:8080/about => 脚本链接,但同样没有来自模板的 html。

i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from C:\Users\Nick\Javascript\Webpack\test

【问题讨论】:

  • 您是否尝试将 webpack.common.js 文件的 plugins 部分添加到 webpack.dev.js 文件中?如果 HtmlWebpackPlugin 不在您的 webpack 开发服务器配置中,您的 webpack 开发服务器将如何知道以您指定的方式使用它?尝试将其添加到 webpack.dev.js 文件中。
  • 嗨,Seth,谢谢,我会试一试,但是 webpack-merge 不会从 webpack.common.js 和 webpack.dev.js 创建单个配置吗?
  • 不幸的是没有解决这个问题。很确定 webpack.common.js 正在与 webpack.dev.js 合并到一个配置文件中,因为在前者中添加 `devServer: {openPage: 'admin' },` 会打开正确的页面,并且 index.html 确实使用正确的模板。感谢您的回复

标签: javascript webpack webpack-dev-server html-webpack-plugin


【解决方案1】:

我认为你缺少一个加载器检查https://www.npmjs.com/package/ejs-webpack-loader

我在HtmlWebpackPlugin的包页面中找到了一个示例,尝试一下也许会对您有所帮助

plugin: {
  new HtmlWebpackPlugin({
    template: '!!ejs-webpack-loader!src/index.ejs'
  })
}

【讨论】:

  • 好主意,但不幸的是它没有奏效。此外,将文件写入磁盘时它工作正常,所以感觉可能是 dev-server 的问题,以及它在哪里或如何提供文件?我在上面提到,它适用于localhost:8080,但不适用于localhost:8080/indexlocalhost:8080/about,尽管为后两个url 注入了javascript。看起来很奇怪
【解决方案2】:

好吧,我不妨张贴我的羞耻感作为答案,以防它在未来对其他人有所帮助......

我导航到 localhost:8080/about 而不是 localhost:8080/about.html

脚本是在 /about 中注入的,但模板不是。在 /about.html 中使用了脚本和模板。我不确定为什么会有不同,但那是我的问题!

【讨论】:

  • 见。当您转到/about 时,Web 服务器默认查找/about/index.html,它不会自动html 文件名附加到您的路径中。就是这样。。
  • 那么 /about 甚至存在不是很奇怪吗?例如,如果我导航到 /bout,则根本没有路线。但是,是的,很高兴找到它!
  • 使用网络服务器时,只要不指定文件名,就应将其视为文件夹。
【解决方案3】:

作为参考:https://github.com/jaketrent/html-webpack-template/issues/69#issuecomment-376872044.

简而言之,您需要 LOOP 将所有块插入到最终的 html 文件中。

以下是模板文件中的示例代码

<% for (var chunk in htmlWebpackPlugin.files.js) { %>
    <script src="<%= htmlWebpackPlugin.files.js[chunk]%>"></script>
<% } %>

希望对您有所帮助,如果我有误解,请随时。

【讨论】:

  • 嗨 Shina - 我构建文件时正确插入了脚本/css 和 html。当我使用 webpack-dev-server 时,它们不是。这似乎与您链接的问题略有不同?我肯定会尝试一下,因为它可能会改变开发服务器的行为,谢谢。
  • 不幸的是同样的行为。
  • 能给我webpack版本信息吗?
  • webpack 4.44.0.还重写/减少了示例以使其更清晰
  • 我还注意到 webpack-dev-server 在 localhost:port 时注入了 html,而不是在 localhost:port/index(或 /about)。相关的 js 脚本以任何一种方式注入。不确定这是否能说明正在发生的事情?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2017-07-12
  • 2019-07-18
  • 1970-01-01
  • 2017-07-04
  • 2017-05-08
  • 2021-06-24
相关资源
最近更新 更多