gpt4 book ai didi

templates - 如何使用 html-webpack-plugin + twig-loader 包含图像?

转载 作者:行者123 更新时间:2023-12-05 08:41:49 26 4
gpt4 key购买 nike

我想像简单标签一样在我的 Twig 模板中包含一个图像,但它不想包含。对于构建,我使用 HtmlWebpackPlugin 和 twig-loader;但是如果我对 html-loader 和 html 模板做同样的事情 - 它工作正常。如何正确使用 twig-loader?

我的 webpack 配置:

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

const PATHS = {
source: path.join( __dirname, './source' ),
build: path.join( __dirname, './build' )
};

module.exports = {
entry: `${ PATHS.source }/index.js`,
output: {
path: PATHS.build,
filename: 'webpack.bundle.js'
},
module: {
rules: [
{
test: /\.twig/,
loader: 'twig-loader'
},
{
test: /.*\.(gif|png|jpe?g)$/i,
use: [
{
loader: 'file-loader?name=[name].[ext]'
}
]
}
]
},
plugins: [
new HtmlWebpackPlugin( {
filename: 'index.html',
template: `${PATHS.source}/index.twig`,
} )
],
};

我的 Twig 模板:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<img src="./chuck-norris.jpg" alt="">
</body>
</html>

我的 package.json:

{
"name": "htmlWebpackPlugin-twigLoader",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack"
},
"author": "evisotskiy",
"license": "ISC",
"devDependencies": {
"file-loader": "^0.11.2",
"html-loader": "^0.5.1",
"html-webpack-plugin": "^2.30.1",
"twig-loader": "^0.3.1",
"webpack": "^3.6.0"
}
}

我的项目结构:

.
├── webpack.config.js
├── package.json
├── source
| ├──index.twig
| ├──index.js (empty)
| ├──chuck-norris.jpg

当我执行 npm run build 时,我得到了 dir:

├── build
| ├──index.html
| ├──webpack.bundle.js

没有 chuck-norris.jpg

当我使用 html-loader 而不是 twig-loader 和 html-template 而不是 twig-template - 图像构建良好。但是对于我的项目,我需要使用 Twig 模板。如何正确使用 twig-loader?

最佳答案

我找到了解决办法。我没有直接将 .twig 文件作为模板传递给 HtmlWebpackPlugin,而是将一个 .js 文件作为模板传递给 HtmlWebpackPlugin,我在其中包含了一个 .twig 文件和图像,并将图像作为变量传递给 twig-template。现在项目看起来像这样:

我的 webpack 配置:

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

const PATHS = {
source: path.join( __dirname, './source' ),
build: path.join( __dirname, './build' )
};

module.exports = {
entry: `${ PATHS.source }/index.js`,
output: {
path: PATHS.build,
filename: 'webpack.bundle.js'
},
module: {
rules: [
{
test: /\.twig$/,
loader: 'twig-loader'
},
{
test: /.*\.(gif|png|jpe?g)$/i,
use: [
{
loader: 'file-loader?name=[name].[ext]'
}
]
}
]
},
plugins: [
new HtmlWebpackPlugin( {
filename: 'index.html',
template: `${PATHS.source}/index.twig.js`,
} )
],
};

我的 Twig 模板:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<img src="{{ image.src }}" alt="{{ image.alt }}">
</body>
</html>

我的 index.twig.js:

const template = require( './index.twig' );

const image = {
src: require( './chuck-norris.jpg' ),
alt: "Chuck Norris"
};

module.exports = template( { image } );

我的 package.json:

{
"name": "htmlWebpackPlugin-twigLoader",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack"
},
"author": "evisotskiy",
"license": "ISC",
"devDependencies": {
"file-loader": "^0.11.2",
"html-webpack-plugin": "^2.30.1",
"twig-loader": "^0.3.1",
"webpack": "^3.6.0"
}
}

我的项目结构:

.
├── webpack.config.js
├── package.json
├── source
| ├──index.twig
| ├──index.twig.js
| ├──index.js (empty)
| ├──chuck-norris.jpg

当我执行 npm run build 时,我得到了我预期的构建项目:

├── build
| ├──index.html
| ├──chuck-norris.jpg
| ├──webpack.bundle.js

关于templates - 如何使用 html-webpack-plugin + twig-loader 包含图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com