bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Сборка проекта с ENB #1407

Closed Kundin closed 6 years ago

Kundin commented 7 years ago

Подскажите, как собрать проект в отдельную папку public, в которой должны быть все html-страниц, в public/css все .css файлы бандлов и public/js аналогично. С этим собственно разобрался. Теперь хотелось бы чтобы в html все пути правильно поменялись на public. Попытался с .borschik, но получить нужный путь так и не смог... Например, есть бандл каталог, при сборке должны быть файлы public/catalog.html, public/js/catalog.min.js, public/css/catalog.min.css и они должны подключиться.

tadatuta commented 7 years ago

Верно ли, что речь идет о проекте на основе project-stub? Если так, то должно быть достаточно в bemjson-файле заранее написать необходимый путь:

module.exports = {
    block: 'page',
    title: 'Title of the page',
    favicon: '/favicon.ico',
    head: [
        { elem: 'meta', attrs: { name: 'description', content: '' } },
        { elem: 'meta', attrs: { name: 'viewport', content: 'width=device-width, initial-scale=1' } },
-        { elem: 'css', url: 'catalog.min.css' }
+        { elem: 'css', url: 'css/catalog.min.css' }
    ],
-    scripts: [{ elem: 'js', url: 'catalog.min.js' }],
+    scripts: [{ elem: 'js', url: 'js/catalog.min.js' }],
    mods: { theme: 'islands' },
    content: [
Kundin commented 7 years ago

ахахахах, боже...Ответ был неожиданно близко)

Kundin commented 7 years ago

Хорошо. Теперь картинки. Как научить ENB перетаскивать все картинки в public/images и как научить преобразовывать

.logotype {
  background: url(../images/logotype.png);
}

Сейчас после сборки путь выходит ../../common.blocks/images/logotype.png, хотя его в принципе не нужно менять.

tadatuta commented 7 years ago

Для этого как раз borschik и нужен.

Задачу решит примерно такой конфиг:

{
    "paths": {
        "./public/images": "images/"
    },
    "freeze_paths" : {
        "node_modules/**": "public/images",
        "*.blocks/**": "public/images"
    }
}

В секции paths говорим, что ./public/images на диске должно замениться на images/ в собранном CSS-бандле. А freeze_paths, соответственно, подменяют пути из исходников в блоках на пути относительно CSS-бандла.

Kundin commented 7 years ago

Огромное спасибо! Слегка запутался с путями сначала, которые нужно писать в исходном css, но теперь работает и файлы замороженные в нужной папке. Круто!