Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить технологию write-file #425

Closed
pavelpower opened this issue Jan 19, 2016 · 8 comments
Closed

Добавить технологию write-file #425

pavelpower opened this issue Jan 19, 2016 · 8 comments

Comments

@pavelpower
Copy link
Contributor

enb/techs/write-file

Технология генерирование файла указав контент в виде типа String или Bufer.

Одновременно выполнить функцию provide (то, что делает file-provide) для платформы make.

Зачем это нужно?

Как пример использования такой технологии приведу задачу из моего проекта.

Задача: к проекту посредством сабмодуля гит подключается слой переопределения с набором блоков.
Весь JavaScript код из этих блоков должен быть собран в один модуль extention-apps.
И добавлен в модульную систему как один модуль.

Вот пример файла который нужно сгенерировать:

common.blocks/external-apps/external-apps.js

modules.define('external-apps', function(provide, apps) {

    apps = apps || {};

    apps['app-tetris'] = {
        init: funciton () {
            //...
        }
    };

    provide(apps);
});

modules.define('external-apps', function(provide, apps) {

    apps = apps || {};

    apps['app-footboal'] = {
        init: funciton () {
            //...
        }
    };

    provide(apps);
});

// more apps ....

Как это можно реализовать?

А вот так:

var techs = require('enb-bem-techs'),
    writeFile = rewuire('enb-write-file'),
    js = require('enb/techs/js');

module.exports = function (config) {

    var contentBemdeclFile,
        apps = FS.readdirSync('./external-apps'); // read git-submodules layer

    // create content for "external-apps.bemdecl.js"
    apps = apps.filter(function (name) {
        return name !== 'readme.md';
    }).map(function (name) {
        return '{name: "' + name + '"}'
    }).join(',\n');

    contentBemdeclFile = ['exports.blocks = [\n', apps, '\n];'].join('\n');

    config.node('common.blocks/external-apps', function (nodeConfig) {

        nodeConfig.addTechs([
            [techs.levels, {
                levels: [
                    {path: nodeConfig._path, check: true},
                    {path: config.resolvePath('external-apps'), check: true}
                ]
            }],

            [writeFile, {
                target: '?.bemdecl.js',
                content: contentBemdeclFile
            }],

            [techs.files, {depsFile: '?.bemdecl.js'}],

            // concat all js files to externl-apps.js
            [js, {
                target: '?.js'
            }]
        ]);

        nodeConfig.addTargets(['?.js']);
    });

}
@blond
Copy link
Member

blond commented Jan 19, 2016

Одновременно выполнить функцию provide (то, что делает file-provide) для платформы make.

Не совсем. Эта технология, как и любая другая просто говорит, что записала свой результат в файл.

Просто file-provider делает только это :)

@blond
Copy link
Member

blond commented Jan 19, 2016

Ждём PR :)

@pavelpower
Copy link
Contributor Author

@blond а почему бы не запровайдить? Т.е. даже не стоит так делать?

@blond
Copy link
Member

blond commented Jan 19, 2016

Уточни, что имеешь ввиду под запровайдить :)

@pavelpower
Copy link
Contributor Author

@blond достаточно ли должно быт использование enb/techs/write-file для того, чтобы записать файл и не использовать за одно file-provide?

Или file-provide must have в цепочке подключаемых технологий?

@blond
Copy link
Member

blond commented Jan 19, 2016

достаточно ли должно быт использование enb/techs/write-file для того, чтобы записать файл и не использовать за одно file-provide?

Достаточно.

pavelpower added a commit to pavelpower/enb that referenced this issue Jan 19, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 19, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 19, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 19, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 19, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 19, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 20, 2016
@pavelpower
Copy link
Contributor Author

@blond

Ждём PR :)

#426

pavelpower added a commit to pavelpower/enb that referenced this issue Jan 30, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 30, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 30, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Jan 30, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Feb 5, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Feb 21, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Feb 21, 2016
pavelpower added a commit to pavelpower/enb that referenced this issue Feb 22, 2016
blond added a commit that referenced this issue Feb 22, 2016
@blond
Copy link
Member

blond commented Mar 20, 2016

Fixed in #426.

@blond blond closed this as completed Mar 20, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants