如果图像标记位于我的index.ejs模板中,我发现我错过了在webpack配置中加载图像的设置。
我的项目中的html文件中的所有图像都被正确重命名并在构建期间加载正常,但.ejs文件中的图像标记将被忽略。
即在我的.ejs中如果我有<img src="../../home.png">
它仍然是这样,但在普通的html文件中它变为<img src="12345677.png">
我目前的装载机:
loaders: [
//HTML Files
{
test: /\.html$/,
loader: 'html'
},
//Transpile ES6 to ES5
{
test: /\.js$/,
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
loader: 'babel',
query: {
presets: [
["es2015", {"module": false}]
]
}
},
//Extract Normal CSS
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({ loader : 'css?sourceMap!autoprefixer', publicPath: "../"})
},
//Bundle Less into CSS Code
{
test: /\.less$/,
loader: ExtractTextPlugin.extract({ loader : 'css?sourceMap!autoprefixer!less?sourceMap', publicPath: "../"})
},
//Images
{
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,
loader: 'file'
}
]
和重要的插件:
plugins.push(
new HtmlWebpackPlugin({
hash: true,
filename: 'index.html',
template: './src/index.ejs',
favicon: './src/favicon.ico',
inject : false
}),
// Write out CSS bundle to its own file:
new ExtractTextPlugin({
filename: 'css/[contenthash].styles.css',
allChunks: true
}),
);
答案 0 :(得分:3)
只需提供更新的答案。
在Webpack 4中,您可以将图像加载到.ejs
文件中,而无需使用html-loader
。
将src
标签中的img
属性更改为:
<!-- index.ejs -->
<img src="<%= require('../../home.png') %>" alt="image text">
使用esModule: false
启用CommonJS模块语法
// webpack.config.js
module: {
rules: [
...,
test: /\.(png|jpg|etc)$/,
use: [{
loader: "file-loader", // or url-loader
options: {
...,
esModule: false,
}
}]
]
}
答案 1 :(得分:2)
我认为 ejs没有图片加载器支持
您可以尝试使用此链接 underscore-template loader 按照此author
thread的建议加载图片文件>webpack的另一个加载器包括 ejs-loader