Могу ли я объединить webpack 'copyFiles' с конфигурацией twig.paths - PullRequest
4 голосов
/ 07 августа 2020

Я использую веб-пакет на бис, поэтому это мой webpack.config для копирования файлов:

# webpack.config.js
Encore
    // -- 37 lines --
    .copyFiles({
        from: './assets/images',
        pattern: /\.(png|jpg|jpeg|ico)$/,
        // to path is relative to the build directory
        to: 'images/[path][name].[hash:8].[ext]'
    })

;

Все мои файлы изображений находятся в . / Assets / images .

Теперь я запускаю yarn watch

Итак, мои изображения копируются в public / build / images как manifest. json показывает:

# public/build/manifest.json

{
  "build/app.css": "/build/app.css",
  "build/app.js": "/build/app.js",
  "build/mail.css": "/build/mail.css",
  "build/mail.js": "/build/mail.js",
  "build/runtime.js": "/build/runtime.js",
  "build/vendors~app.js": "/build/vendors~app.js",
  "build/fonts/fontawesome-webfont.ttf": "/build/fonts/fontawesome-webfont.1e59d233.ttf",
  "build/fonts/fontawesome-webfont.woff2": "/build/fonts/fontawesome-webfont.20fd1704.woff2",
  "build/fonts/fontawesome-webfont.eot": "/build/fonts/fontawesome-webfont.8b43027f.eot",
  "build/fonts/fontawesome-webfont.woff": "/build/fonts/fontawesome-webfont.f691f37e.woff",
  "build/images/favicon.ico": "/build/images/favicon.c48cee16.ico",                       <-- This one
  "build/images/fontawesome-webfont.svg": "/build/images/fontawesome-webfont.c1e38fd9.svg",
  "build/images/logo.png": "/build/images/logo.63e19ce5.png"                              <-- This one
}

Затем я пытаюсь установить псевдонимы в моем twig.yaml файле

# config/packages/twig.yaml
twig:
   default_path: '%kernel.project_dir%/templates'
   paths:
       '%kernel.project_dir%/public/build/images/': images
       '%kernel.project_dir%/public/build/': build

И я использую псевдонимы, чтобы получить свое изображение в базе. html. twig

# template/base.html.twig
<link rel="shortcut icon" href="{{ asset("@images/favicon.ico") }}" type="image/x-icon" />

Я также пробовал использовать этот синтаксис:

# template/base.html.twig
<link rel="shortcut icon" href="{{ "@images/favicon.ico" }}" type="image/x-icon" />

Но он не работает.

Единственный синтаксис, который работает:

# template/twig.yaml
<link rel="shortcut icon" href="{{ asset("build/images/favicon.ico") }}" type="image/x-icon" />

Так что я делаю не так? Можно ли вообще использовать псевдонимы при копировании файла, содержащего ha sh? Я мог бы использовать псевдонимы непосредственно перед тем, как попробую использовать copyFiles.

Ответы [ 2 ]

1 голос
/ 14 августа 2020

Я нашел здесь ответ:

Встраивание ресурса Webpack в шаблонное электронное письмо Twig с использованием Symfony Mailer

Это работает perfectyl.

Просто не забудьте очистить кеш (php bin/console c:c)

Теперь мой код выглядит так:

# config/packages/twig.yaml
twig:
    paths:
      '%kernel.project_dir%/public/build/images/': images
      '%kernel.project_dir%/public/': build
# templates\Mailer\password_reset.html.twig
...
<img src="{{ email.image('@images/' ~ asset('build/images/logo.png')|split('/')[3]) }}" alt="Logo">
...

Если у вас все еще есть ошибка даже после при этом попробуйте скопировать / path config/packages/twig.yaml в config/packages/env/twig.yaml (замените env своим именем env)

Даже если это немного взломано, это работает.

0 голосов
/ 14 августа 2020

Краткий ответ на ваш вопрос: нет, вы не можете комбинировать webpack copyFiles и twig.paths.

Пути Twig с именами используются только загрузчиком файлов Twig, поэтому он будет работает только в том случае, если вы будете включать, импортировать, расширять или встраивать файл Twig.

...