用于.ejs模板中图像的Webpack文件/图像加载器

时间:2016-11-09 10:06:50

标签: javascript webpack ecmascript-6 ejs

如果图像标记位于我的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
            }),
        );

2 个答案:

答案 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