Giter VIP home page Giter VIP logo

enb's Introduction

ENB

NPM Status Travis Status Windows Status Coverage Status Dependency Status

The tool for building web projects created with the BEM methodology.

Introduction

The main purpose of ENB is to combine source files into bundles, usually for further use in the browser.

The build includes combining all source files, processing them and converting the code, as well as preparing and packing the resources (images, fonts, and so on).

Read more about building BEM projects on the bem.info site.

Basic features of ENB

  • Searches for only those source files needed for the build.
  • Connects the necessary source files based on dependency declarations.
  • Defines the order of connecting the source files.
  • Combines source files spread across the project's file system.
  • Creates bundles and files.
  • Extends the build for project-specific processing and conversion.
  • Provides a local development service that supports builds on demand.

Installation

$ npm install --save-dev enb

Getting started

To create a BEM project configured for the build with ENB, use one of these options:

  1. Install a project-stub template project that supports ENB builds by default.
  2. Create a project that suits your tasks. To do this, answer the questions in the BEM project generator based on Yeoman.

Documentation

Materials

Extensions

ENB technology packages are located in NPM: packages with the enb prefix.

Name Status Description
BEM methodologies
BEM NPM version Technologies for building BEM projects.
BEViS NPM version Technologies for building BEViS projects.
Templating
bem-xjst NPM version Building BEMTREE and BEMHTML templates with bem-xjst.
xjst NPM version Building BEMTREE and BEMHTML templates with XJST.
bh NPM version Building BH templates.
bt NPM version Building BT templates.
Styles
CSS NPM version Building and minimizing CSS files.
PostCSS NPM version Building and processing CSS files with postcss.
Stylus NPM version Building and minimizing Stylus files.
Saas NPM version Building Sass files.
Roole NPM version Building roo files.
JavaScript
JavaScript ![NPM version] (https://img.shields.io/npm/v/enb-js.svg) Building, processing and minimizing JS files.
YModules NPM version Building JS files with YModules.
Public facilities
Examples NPM version Building BEM examples.
Docs NPM version Building BEM documentation.
Browser tests NPM version Building and running tests for client-side JavaScript.
Node tests NPM version Building and running tests for BEM templates.
Template tests NPM version Building and running tests for BEM templates.

License

© 2013 YANDEX LLC. The code is released under the Mozilla Public License 2.0.

enb's People

Contributors

arikon avatar blond avatar boronchiev avatar bratva avatar egavr avatar emelyanovtv avatar escaton avatar golyshevd avatar greenkeeper[bot] avatar greenkeeperio-bot avatar innabelaya avatar insane-developer avatar j0tunn avatar loyd avatar makishvili avatar mdevils avatar mishanga avatar pavelpower avatar persidskiy avatar qfox avatar ruslankerimov avatar sbmaxx avatar scf2k avatar shirastarshiu avatar swinx avatar tadatuta avatar tormozz48 avatar tworoger avatar vithar avatar yeti-or avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

enb's Issues

Не работает фризинг картинок

Начиная с версии 0.11.0 перестал работать фризинг картинок борщиком. Использование пакета enb-borschik не помогает, похоже дело в самом ENB.

html from bemtree

Набросал небольшие изменения в html-from-bemjson-i18n, чтобы из datajson генерировался html с использованием bemtree, получился такой импровизированный html-from-datajson-i18n:
https://gist.github.com/xdghcnt/98f97216d4211df4ea87
Буду рад, если мне покажут, как делать это правильно (с использованием готовой технологии, а не копипастом из неё), или хотя бы скажут примерную причину того, что при генерации конечных файлов на двух языках, в BEM.I18N используется первый.

Wrong help information for "enb server -h" command call

-h option is doubled in enb server's help:

  › enb server --help

  Usage: server [options]

  Options:

    -h, --help             output usage information
    -p, --port <port>      socket port [8080]
    -h, --host <host>      socket host [0.0.0.0]
    -s, --socket <socket>  unix socket path
  › enb server -h

  error: option `-h, --host <host>' argument missing

Windows path search problem.

module.exports = function(config) {
    console.log('1');
    config.nodes('*.bundles/*', function(nodeConfig) {
        console.log('2');
    });
    ...
}

enb make log only '1'.
I thin this is search path problem.

It works on Linux.

Вопрос по технологии css-ie*.js

В технологии, например css-ie7.js, используется useFileList(['css', 'ie7.css']). Как быть в случае, когда стили для ie хранятся не в специфичном для версии ie файле, а в общем ie.css (такие случаи не редки в лего)? Писать свою кастомную технологию или стоит скорректировать эту?

Bug with resolve targets in nested nodes

На файловой системе:

-- sets/
  -- block/
    -- block.md
    -- block.examples/
      -- 10-example/
        -- 10-example.bemjson.js

В конфиге декларируем ноды:

config.nodes('sets/*', ...);
config.nodes('sets/*/*.examples/*', ...);

В результате таргеты разрезолвятся так:

{ 
    node: 'sets/block',
    targets: [ '*', 'block.bundles/10-example' ] 
}

А хочется, чтобы так:

[
    { 
        node: 'sets/block',
        targets: ['*'] 
    },
    { 
        node: 'sets/block/block.bundles/10-example',
        targets: [ '*' ] 
    } 
]

i18n functions

Кейсеты блоков имеют js расширения, и это наталкивает на мысль, что они должны поддерживать полноценные js-объекты, включая функции.

Ещё об этом говорят вот такие тесты: https://github.com/bem/bem-core/blob/v1/common.blocks/i-bem/__i18n/test/test-i18n-complex.js

Я не нашёл способа прокинуть такие функции, т.к. i18n-merge-keysets и i18n-lang-js технологии относятся к keysets как к json-файлам.

Custom make function

Бывают задачи, при которых каких-то нод и/или таргетов может не быть на файловой системе, а они должны появиться в процессе выполнения make-функции.

Чтобы такое стало возможным, хочется иметь возможность доопределять или переопределять make-функцию.

Например, доопределение моглобы выглядеть так:

config.make(function(makePlatform, args) {
    var targets = ...; //раскрываем `args` в список таргетов    

    ... // создаём ноды и/или таргеты на основе `args` на файловой системе
        // и инициализируем созданные ноды и/или таргеты

    makePlatform.buildTargets(targets);
});

Игнорируются файлы с булевым модификатором (без значения)

Например b-link_pseudo.bemhtml из bem-bl.
Как воспроизвести:

// .bem/enb-make.js
module.exports = function(config) {

    config.node('bundles/index', function(nodeConfig) {
        nodeConfig.addTechs([
            [ require('enb/techs/levels'), { levels: getLevels(config) } ],
            [ require('enb/techs/file-provider'), { target: '?.bemjson.js' } ],
            require('enb/techs/bemdecl-from-bemjson'),
            require('enb/techs/deps-old'),
            require('enb/techs/files'),
            require('enb/techs/js'),
            require('enb/techs/css'),
            [ require('enb-bemhtml/techs/bemhtml'), { devMode: false } ],
            require('enb/techs/html-from-bemjson')
        ]);
        nodeConfig.addTargets([
            '?.js',
            '?.css',
            '?.bemhtml.js',
            '?.html'
        ]);
    });

}

function getLevels(config) {

    return [
        { path: 'bem-bl/blocks-common', check: true },
        { path: 'bem-bl/blocks-desktop', check: true }
    ]
        .map(function(levelPath) {
            return config.resolvePath(levelPath);
        });

}
// bundles/index/index.bemjson.js
({
    block: 'b-page',
    title: 'test',
    head: [
        { elem: 'css', url: 'index.css' },
        { elem: 'js', url: '//yandex.st/jquery/1.7.2/jquery.min.js' },
        { elem: 'js', url: 'index.js' }
    ],
    content: {
        elem: 'content',
        content: {
            block: 'b-link',
            mods: { pseudo: 'yes' },
            content: 'click me'
        }
    }
})
npm install enb
npm install enb-bemhtml
git clone git://github.com/bem/bem-bl.git
./node_modules/.bin/enb server

Идем в браузер, видим, что шаблон не применился. Если переименовать файл в b-link_pseudo_yes.bemhtml, то все работает нормально.

Не хватает описания используемых целей технологией "i18n-merge-keysets" в документации.

Привет!
В рамках своего проекта я для многих целей добавляю префиксы, в том числе и для технологии files (удобно потом вычищать / игнорировать собранные файлики для примеров). Когда я пытался собрать html страничку с переводами (технология html-from-bemjson-i18n), то выяснил, что для технологии i18n-merge-keysets есть необходимость указывать таргет с директориями (параметр dirsTarget: '?.dirs'), чего я не увидел в описании самой технологии.
Хочу попросить добавить это знание в документацию :)

Небольшой фрагмент конфига, который у меня получился:

[
    require('enb/techs/files'), {
        filesTarget: '__?.files',
        dirsTarget: '__?.dirs',
        depsTarget: '__?.deps.js',
        levelsTarget: '__?.levels'
    }
],
[
    require('enb/techs/i18n-merge-keysets'), {
        target: '__?.keysets.all.js',
        dirsTarget: '__?.dirs',
        lang: 'all'
    }
],
[
    require('enb/techs/i18n-merge-keysets'), {
        target: '__?.keysets.{lang}.js',
        dirsTarget: '__?.dirs',
        lang: '{lang}'
    }
],
[
    require('enb/techs/i18n-lang-js'), {
        target: '__?.lang.all.js',
        keysetsTarget: '__?.keysets.all.js',
        lang: 'all'
    }
],
[
    require('enb/techs/i18n-lang-js'), {
        target: '__?.lang.{lang}.js',
        keysetsTarget: '__?.keysets.{lang}.js',
        lang: '{lang}'
    }
],
[
    require('enb/techs/html-from-bemjson-i18n'), {
        destTarget: '_?.{lang}.html',
        bemhtmlTarget: '_?.bemhtml.js',
        langAllTarget: '__?.lang.all.js',
        langTarget: '__?.lang.{lang}.js'
    }
]

Add docs for `sourceSuffixes`

Добавить во все технологии, использующие useFileList, документацию про sourceSuffixes опцию:

* *String* **sourceSuffixes** — суффиксы файлов, по которым строится `files`-таргет. По умолчанию — `[...]`.

Версия 1.0.0

В версии 1.0.0 из ENB будут извлечены различные технологии в отдельные пакеты.

Перед версией 1.0.0 будет выпущен релиз 0.x.0 с deprecation-варнингами и четкими инструкциями.

Suggestions?

Ошибка при чтении кэша

./node_modules/.bin/enb make i18n.get

/home/ikokostya/www/beta/.bem/tmp/cache.js:1
ent.bh.js","suffix":"client.bh.js","mtime":1372431761000}}};dules.js","mtime":
                                                                    ^^^
SyntaxError: Unexpected string
    at Module._compile (module.js:437:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.CacheStorage.load (/home/ikokostya/www/beta/node_modules/enb/lib/cache/cache-storage.js:27:26)
    at Object.module.exports.inherit.loadCache (/home/ikokostya/www/beta/node_modules/enb/lib/make.js:120:28)
    at module.exports (/home/ikokostya/www/beta/node_modules/enb/lib/cli/make.js:22:34)
    at Promise._callCallbacks (/home/ikokostya/www/beta/node_modules/vow/lib/vow.js:146:31)
make: *** [i18n.get] Error 1or 1

Завести changelog

Привет!

На данном этапе развития проекта небольшой changelog был был полезен, как думаете?

Ошибка при сборке проекта с технологией css-stylus

С js и css собирается отлично, но при замене css на css-stylus вываливается такая ошибка:

node_modules/.bin/enb make
22:46:31.356 - [enb-test] build started
22:46:31.696 - [enb-test/desktop.bundles/index] [failed] _index.styl
22:46:31.696 - [enb-test] build failed
Error: There is no tech for target desktop.bundles/index/index.styl.
    at Error (<anonymous>)
    at TargetNotFoundError (/var/www/projects/bem/enb-test/node_modules/enb/lib/errors/target-not-found-error.js:11:23)
    at /var/www/projects/bem/enb-test/node_modules/enb/lib/node.js:444:27
    at Array.map (native)
    at /var/www/projects/bem/enb-test/node_modules/enb/lib/node.js:440:36
    at Array.2 (/var/www/projects/bem/enb-test/node_modules/enb/node_modules/vow/lib/vow.js:200:56)
    at callFns (/var/www/projects/bem/enb-test/node_modules/enb/node_modules/vow/lib/vow.js:423:35)
    at process._tickCallback (node.js:415:13)

Собственно мне нужно было прикрутить css-less, которую я сделал на основе css-stylus, но ни одна из технологий не взлетела.

ЧЯДНТ? :-)

Добавить библиотеку if-ie.styl

Привет!

Технология css-stylus работает отлично, но как при её использовании правильно генерировать ?.ie.css файлы? Технология css-ie игнорирует *.ie.styl файлы, а хочется еще и if-ie.styl пользоваться...

Ну или просветите меня, убогого, как в рамках enb крутые ребята используют stylus для генерации стилей для ie?

Ошибка в 0.8.43

TypeError: Object #<Object> has no method 'promise'
    at module.exports.inherit.build (/home/floatdrop/wishes/static/node_modules/enb/lib/make.js:516:27)
    at module.exports (/home/floatdrop/wishes/static/node_modules/enb/lib/cli/make.js:24:37)
    at Array.Promise._callCallbacks [as 0] (/home/floatdrop/wishes/static/node_modules/vow/lib/vow.js:553:56)
    at callFns (/home/floatdrop/wishes/static/node_modules/vow/lib/vow.js:1129:35)
    at process.startup.processNextTick.process._tickCallback (node.js:245:9)

Windows duplicated file require.

enb v0.13.4

I use bem-core -b v3 with default make.js config.

After I use enb make command the file index.bh.js contain duplicated page.bh.js file require.

...
dropRequireCache(require, require.resolve("../../common.blocks/page/page.bh.js"));
require("../../common.blocks/page/page.bh.js")(bh);
dropRequireCache(require, require.resolve("./blocks/page/page.bh.js"));
require("./blocks/page/page.bh.js")(bh);
dropRequireCache(require, require.resolve("./blocks/page/page.bh.js"));
require("./blocks/page/page.bh.js")(bh);
dropRequireCache(require, require.resolve("../../common.blocks/ua/ua.bh.js"));
require("../../common.blocks/ua/ua.bh.js")(bh);
dropRequireCache(require, require.resolve("../../common.blocks/page/__css/page__css.bh.js"));
require("../../common.blocks/page/__css/page__css.bh.js")(bh);
dropRequireCache(require, require.resolve("../../common.blocks/page/__js/page__js.bh.js"));
require("../../common.blocks/page/__js/page__js.bh.js")(bh);
module.exports = bh;

I think problem in windows paths.
Because bhFiles at https://github.com/enb-make/enb-bh/blob/master/techs/bh-server.js#L42
Contain:

  ...
  { name: 'page.bh.js',
    fullname: 'C:\\bem-tests\\bem-core\\common.bundles\\index\\blocks/page/page.bh.js',
    suffix: 'bh.js',
    mtime: 1406810209000,
    isDirectory: false },
  { name: 'page.bh.js',
    fullname: 'C:\\bem-tests\\bem-core/common.bundles/index/blocks/page/page.bh.js',
    suffix: 'bh.js',
    mtime: 1406810209000,
    isDirectory: false },
  ...

Error: EMFILE, too many open files

Sometimes this error appears; however, I don't know precise conditions for its repeating :(
I have only 3 pages with simple bem-json: index, layout-maps, layout-serp.
I've fixed the issue by following instructions:

mv help/layout-serp .
enb make # success!
mv layout-serp help
enb make # success!

Error log:

15:23:41.474 - [failed] [help/layout-maps/layout-maps.bemhtml.js] bh-server
15:23:41.474 - [failed] [help/layout-maps/layout-maps.ru.html] html-from-bemjson-i18n
15:23:41.474 - build failed
Error: EMFILE, too many open files  
    at Object.exports.resolve (path.js:309:52)
    at Object.exports.relative (path.js:370:20)
    at Object.module.exports.inherit.relativePath (project/node_modules/enb/lib/node.js:284:24)
    at buildRequire (project/node_modules/bh/techs/bh-server.js:17:32)

If you need more information dont't hesitate to ask me. Thank you for such great tool!

В css-ie-includes стили для ie должны подключаться после основных

Сейчас порядок не гарантируется, для каждого отдельно взятого блока ie-стили могут подключиться как до основных, так и после.

Более того, у меня есть технологии типа css-ie6-includes, там порядок инклудов должен быть такой: ['css', 'ie.css', 'ie6.css']. Сейчас в итоговом файле они подключаются в случайном порядке.

Некорректная сборка css с заинлайненным svg

Если в исходном css-файле есть заинлайненный svg, в котором встречается строка url(...), сборщик пытается раскрыть его как путь. В итоге собранный css становится невалидным.

Пример: url(%23a) -> url(../../common.blocks/domik/_type/%23a).

См запись: http://ascii.serp.yandex.ru/a/14.

i18n-lang-js: incorrect declaration for plural key with "i18:param"

При выгрузке переводов для множественных ключей с вложенным i18n:param результат обработки выглядит битым. Вместо множественного ключа на декларируется текст с конкатенацией всех ключей без plural_adv.

переводы на входе:

module.exports = {
    "b-form-constructor": {
        "тест": [
            "<i18n:param>count</i18n:param> тест",
            "<i18n:param>count</i18n:param> теста",
            "<i18n:param>count</i18n:param> тестов"
        ]
    }
};

текущий результат

BEM.I18N.decl('b-form-constructor', {
    "тест": function(params) {
        return '["' + params["count"] + ' тест","' + params["count"] + ' теста","' + params["count"] + ' тестов"]'
    }
}, { "lang": "ru" });

ожидаемый результат:

BEM.I18N.decl('b-form-constructor', {
    "тест": function(params) {
        return this.keyset('i-tanker__dynamic').key('plural_adv', {
            "count": params["count"],
            "one":   params["count"] + " тест",
            "some":  params["count"] + " теста",
            "many":  params["count"] + " тестов",
            "none":  ""
        })
    }
}, { "lang": "ru" });

Это возможно починить?

Добавит поддержку Windows

Сейчас нет возможности пользоваться enb на windows, потому что node.relativePath (на самом деле path.relative) возвращает путь с обратными слешами (..\..\) вместо прямых (../../).
Из-за этого, например, не правильно работает технология css.js, где import'ы пишутся с обратными слешами.

Не уверен, где нужно это поправить правильно: в технологиях, напрямую в lib/node.js, либо добавить метод node.relativePathUnix и использоваться его в технологиях, которые на windows и на unix требуют прямой слеш.

Добавить более семантичный алиас для ключа --no-cache

Ключ -n (--no-cache) выглядит непривычно.

Может быть, стоит добавить ему какой-нибудь более семантичный алиас вроде -f (--force)?

Или -B. Плюс такого варианта: возможность завернуть вызов enb в makefile примерно в таком виде:

.PHONY: fast
    $(ENB) make $(MAKEFLAGS)

Непонятное сообщение в случае неправильных депсов

Если в депсах синтаксическая ошибка, то выводится вот такое сообщение:

SyntaxError: Unexpected token {
    at Module._compile (module.js:437:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at module.exports.inherit.build (/home/dmikis/git/yaprobki/node_modules/enb/techs/deps-old.js:64:31)
    at Promise.spread (/home/dmikis/git/yaprobki/node_modules/enb/node_modules/vow/lib/vow.js:126:36)
    at Array.Promise._callCallbacks [as 0] (/home/dmikis/git/yaprobki/node_modules/enb/node_modules/vow/lib/vow.js:200:56)
    at callFns (/home/dmikis/git/yaprobki/node_modules/enb/node_modules/vow/lib/vow.js:423:35)
make: *** [rebuild] Error 1

Она непонятная :(

Error with a server running after moving a block file

I worked with BH templates. Trying to create a new template, I made a file libs/bouwdoos/desktop.blocks/jquery/__core/jquery__core.js, named it js instead of bh.js by mistake.
Then, reloaded a page several times which caused rebuilding. After I understood what my mistake was, I moved the file

mv s/libs/bouwdoos/desktop.blocks/jquery/__core/jquery__core{,.bh}.js

But ENB still remembers my old js file and now I have this errors:

varya-2:toivonen.github.com toivonen$ ./node_modules/enb/bin/enb server
18:25:16.877 - [rebuild] [s/desktop.pages/index/index.bemjson.js] file-provider
18:25:16.882 - [rebuild] [s/desktop.pages/index/index.levels] levels
18:25:16.885 - [rebuild] [s/desktop.pages/index/index.bemdecl.js] bemdecl-from-bemjson
18:25:16.902 - [failed] [s/desktop.pages/index/index.deps.js] deps-with-modules
18:25:16.902 - [failed] [s/desktop.pages/index/index.files] files
18:25:16.902 - [failed] [s/desktop.pages/index/index.css] css
18:25:16.903 - [failed] [s/desktop.pages/index/index.bemhtml.js] bh-server
18:25:16.903 - [failed] [s/desktop.pages/index/index.pre.js] js
18:25:16.903 - [failed] [s/desktop.pages/index/index.min.css] borschik
18:25:16.903 - [failed] [s/desktop.pages/index/index.html] html-from-bemjson
18:25:16.903 - [failed] [s/desktop.pages/index/index.js] prepend-modules
Error: ENOENT, open '/Users/toivonen/Work/toivonen.github.com/s/libs/bouwdoos/desktop.blocks/jquery/__core/jquery__core.js'

rm -rf .bem/tmp/ helped. But it seems that a developer should be able to move his/her files without it.

Суффиксы дирректорий

Почему дирректории не могут иметь суффиксы с несклькими точками?

Вот этот код, кажется, это обрабатывает и не учитывает дирректории с несколькими точками в суффиксе!

Как использовать переменные в stylus?

Привет!

В enb-make.js пробовал писать

[ require("enb/techs/css-stylus"), {ie: 'false', ie8: 'false', ie9: 'false'/*, import: 'if-ie.styl/if-ie'*/ } ],

или

new (require('enb/techs/css-stylus'))({ variables: {ie: 'false', ie8: 'false', ie9: 'false'}/*, import: 'if-ie.styl/if-ie'*/}),

Но почему-то не взлетело. Можно пример?

Мне это нужно чтобы удобнее использовать либу if-ie.styl.
Сейчас приходится импортировать эту либу через @import внутри одного из .styl файлов, а потом для каждого блока дублировать технологию .styl в файлах *.ie.styl, *.ie8.styl и т.п.

Вне рамок enb у меня получалось красиво подключать всё это дело через grunt вот таким образом:

stylus: {
    all: {
        options: {
            paths: ['code/styl', 'node_modules'],
            compress: false,
            define: {
                'ie': false,
                'ie8': false
            },
            import: [
                'nib',
                'if-ie.styl/if-ie',
                'utilities/variables',
                'utilities/mixins'
            ]
        },
        files: {
            'code/css/styles.css': fileList
        }
    },
    ie8: {
        options: {
            paths: ['code/styl', 'node_modules'],
            compress: false,
            define: {
                'ie': false,
                'ie8': true
            },
            import: [
                'nib',
                'if-ie.styl/if-ie',
                'utilities/variables',
                'utilities/mixins'
            ]
        },
        files: {
            'code/css/styles.ie8.css': fileList
        }

    },
    ie: {
        options: {
            paths: ['code/styl', 'node_modules'],
            compress: false,
            define: {
                'ie': true
            },
            import: [
                'nib',
                'if-ie.styl/if-ie',
                'utilities/variables',
                'utilities/mixins'
            ]
        },
        files: {
            'code/css/styles.ie.css': fileList
        }

    }
}

Т.е. ставим if-ie.styl через npm, определяем переменные для каждой цели, определяем импорты (почему-то require('if-ie.styl/if-ie') не ищется, а с импортом норм) и не нужно писать лишние файлы, что очень напрягает в моём случае.

Технология css-less

Прошу сделать по аналогии с технологией css-stylus технологию css-less.

Теряется кавычка при сборке css с заинлайненным svg

Если в исходном css'е есть заинлайненный svg, включенный в одинарные кавычки, и если внутри этого svg есть круглые скобки, кавычка в начале теряется.
Т.е.

.domik_type_popup
{
    background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20url(%23l)20fill%3D%22none%22%2F%3E%3C%2Fsvg%3E');
}

станет

.domik_type_popup
{
    background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20url(%23l)20fill%3D%22none%22%2F%3E%3C%2Fsvg%3E');
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.