私はWebpack 4を使用しています。構成ファイルを作成しています。HtmlWebpackPlugin
を使用しようとすると、コンソールでEntrypoint undefined = index.html
が表示されます。ブラウザが開き、HTMLが表示されますが、コンソールにこの奇妙なメッセージが表示されます。これを解決する方法は?
それは私の設定ファイルがどのように見えるかです:
'use strict'
const webpack = require('webpack')
const { join, resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: 'development', // dev
devtool: 'cheap-module-eval-source-map', // dev
entry: join(__dirname, 'src', 'index.js'),
output: {
filename: 'bundle.js',
path: resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
resolve: {
extensions: ['*', '.js', '.jsx']
},
devServer: {
contentBase: resolve(__dirname, 'build')
},
plugins: [
new webpack.ProgressPlugin(),
new HtmlWebpackPlugin({
template: join(__dirname, 'public', 'index.html')
}),
new webpack.HotModuleReplacementPlugin(), // dev
new webpack.NoEmitOnErrorsPlugin() // dev
]
}
これを試して;あなたは間違ったテンプレートパスを作成している可能性があります:
new HtmlWebpackPlugin({
template: resolve(__dirname, 'src/public', 'index.html'),
filename: './index.html'
}),
Publicがsrcフォルダーにある場合、これは機能するはずです。それは私の推測です。問題が解決しない場合はお知らせください。
不要なローダーを起動するテンプレートの拡張に問題があるようです。テンプレートの拡張子が他のものに変更された場合、プラグインは機能します。
デフォルトのwebpackテンプレートシステム( EJS 、webpack 4以降)を使用している場合、テンプレートが無効であるため、ejs
を使用するのが理にかなっていますhtml
:
new HtmlWebpackPlugin({
// it works without 'path.resolve()'. No need for 'filename', defaults to 'index.html'
template: "./public/index.ejs",
}),
webpackは、デフォルトでテンプレートがEJSであると見なし、適切なローダーで自動的に処理します。他のテンプレートシステムを使用する場合は、対応するローダーを追加する必要があります。 公式ドキュメント の詳細。