Я использую Node.js, Express 4 и обработчик шаблонов Handlebars. Некоторые просмотры страниц, которые я визуализирую с помощью Handlebars, содержат несколько килобайт статического встроенного кода SVG. Есть ли простой чистый способ поместить код SVG в отдельный файл, который будет включен в шаблон макета Handlebars? В идеале этот включаемый файл должен иметь расширение .svg, но допускается и .hbs.
Передача включаемого файла в макет Handlebars
Ответы (3)
вчера решал такую же задачу. И я закончил загрузку файла svg в строку, а затем передал его в шаблон руля.
var svgTemplate = fs.readFileSync('./public/app/build/images/spriteAll.svg', 'utf8');
var express = require('express'),
router = express.Router();
router.get('/', function (req, res) {
res.render('main', {
svgTemplate: svgTemplate
});
});
//где main.hbs содержит: ...
<body class="ng-cloak">
<div class="inline-svg">
{{{svgTemplate}}}
</div>
....
</body>
person
Romick
schedule
14.02.2017
Romick Мне нравится ваше решение больше, чем использование частей Handlebars для включения файла. Ваше решение допускает расширение .svg во включаемом файле.
- person natesrc; 16.02.2017
Но если бы это был частичный руль, он был бы включен в кеширование руля. В этом решении запрос будет ожидать чтения файла svg с диска каждый раз, когда запрашивается
/
. Я бы по крайней мере прочитал весь свой файл SVG в память при запуске узла.
- person G Man; 28.03.2019
Но мое решение уже делает то, что вы только что сказали. У меня есть процесс gulp, который собирает все файлы svg, обрабатывает их и возвращает один файл svg. Затем, когда сервер запускается, я читаю этот файл в строку, и эта строка все время находится в памяти, пока сервер узла работает.
- person Romick; 28.03.2019
Вы можете создать папку статических ресурсов (например, /public
) в своем проекте и включить ее в Express: app.use(express.static('public'));
Поместите туда свой файл .svg.
Затем в файле handlebars просто добавьте SVG, как в обычном HTML-проекте, например <img src="your.svg">
.
person
Shruggie
schedule
11.02.2017
Бен, использующий тег img для связывания файла SVG, ограничивает возможности CSS по стилю изображения SVG. Использование встроенного SVG в HTML загружает SVG в DOM, делая его доступным для изменения стиля с помощью CSS. Я ищу способ поместить встроенный SVG во включаемый файл Handlebars, чтобы избежать раздутой разметки.
- person natesrc; 11.02.2017
Вы можете попробовать handlebars-partial-file, чтобы включить содержимое файла в качестве Ручки частичные.
person
Michio
schedule
15.01.2018