Estoy usando webpack con HtmlWebpackPlugin, html-loadery file-loader. Tengo una estructura de proyecto simple en la que no uso marcos, sino solo mecanografiado. Por lo tanto, escribo mi código HTML directamente en index.html. También uso este archivo HTML como mi plantilla HtmlWebpackPlugin.
Como todos los sitios web, necesito poner una imagen que haga referencia a PNG en mi carpeta de activos. file-loaderdebe cargar el archivo correctamente, poner el nuevo nombre de archivo dentro de la srcetiqueta, pero eso no es lo que está sucediendo. En cambio, como el valor de la srcetiqueta, tengo [object Module]. Supongo que file-loaderemite algún objeto y se representa así cuando .toString()se ejecuta su método. Sin embargo, puedo ver que file-loaderha procesado el archivo con éxito y emitió un nuevo nombre a la ruta de salida. No consigo errores. Aquí está mi configuración de paquete web y index.html.
const projectRoot = path.resolve(__dirname, '..');
{
entry: path.resolve(projectRoot, 'src', 'app.ts'),
mode: 'production',
output: {
path: path.resolve(projectRoot, 'dist'),
filename: 'app.bundle.js'
},
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.html$/i,
use: 'html-loader'
},
{
test: /\.(eot|ttf|woff|woff2|svg|png)$/i,
use: 'file-loader'
},
{
test: /\.scss$/i,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
hmr: false
}
},
{
loader: 'css-loader',
options: {
sourceMap: false
}
},
{
loader: 'sass-loader',
options: {
sourceMap: false
}
}
]
},
{
exclude: /node_modules/,
test: /\.ts$/,
use: 'ts-loader'
}
]
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: path.resolve(projectRoot, 'src', 'index.html')
}),
new MiniCssExtractPlugin({
filename: '[name].[hash].css',
chunkFilename: '[id].[hash].css',
ignoreOrder: false
})
]
};
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body class="dark">
<header>
<nav class="navigation">
<div class="left">
<img src="assets/logo.png" class="logo"> <!-- This logo is output as [object Module] -->
</div>
<div class="right">
</div>
</nav>
</header>
</body>
</html>
Estructura del proyecto:
config/
webpack.config.js
dist/
src/
styles/
assets/
logo.png
index.html
app.ts
Editar mis dependencias package.json:
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^3.2.0",
"file-loader": "^5.0.2",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.8.0",
"node-sass": "^4.13.0",
"sass-loader": "^8.0.0",
"style-loader": "^1.0.0",
"ts-loader": "^6.2.1",
"typescript": "^3.7.2",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10",
"webpack-dev-server": "^3.9.0"