homemade

    0.3.6 • Public • Published

    homemade.js Homemade.js

    Cozy C-like preprocessor. Implements include, exclude, define, put, if, elif, ifdef.

    a. Use in console

    node homemade.js path/to/source.js path/to/destination.js

    b. Use with grunt ★

    See grunt-homemade task.

    API

    Fully compatible with preprocessor.js syntax.

    #exclude — removes fragments of code

    Source:

    //#exclude
    console.log(a, b, c)
    //#end

    Result:

    Useful when you want to remove supporting code from the build, like helper functions etc.

    #include — inserts file

    Source:

    //#include ./c.js

    c.js:

    Hello world!

    Result:

    Hello world!
    

    Files are inserted in a recursive way, so that inserted files will be handled also. The current directory . is taken one of the current file. The current file is that where the current #inline directive is.

    #define — defines variable to use in preprocessor

    Source:

    //#define name = "Hello world"
    //#define dictToArray = function(dict){ var result = []; for (var key in dict){ result.push(key + " " + dict[key]) }; return result; }

    Defined variables can be used later in #put or #ifs.

    #put — places variable source (uses tosource for serialization)

    Source:

    var projectName = //#put name
    //#define a = {a:1, b:2, c:3}
    //#put a;
    //#put dictToArray(a);
    //#put `var a = ` + projectName + `;`

    Result:

    var projectName = 'Hello world'
    {a:1, b:2, c:3}
    ["a 1", "b 2", "c 3"]

    To output raw code, use markdown inline code notation, like \raw code` + variable`

    #if, #ifdef, #ifndef, #elif, #else

    Source:

    //#if DEV
        console.log("debug:", result)
    //#else
        //#put "var projectName = '" + name + "'"
    //#endif

    Result with DEV === true:

        console.log("debug:", result)

    Result with DEV === false:

        var projectName = 'Hello world'

    For more examples see test/before.js.

    jQuery/Zepto/vanilla plugin boilerplate

    build.js:

    (function($){
        //#ifndef pluginName
            var pluginName = "awesomePlugin"
        //#else
            /* #put `var pluginName = ` + pluginName */
        //#endif
     
        //#include "../src/utils.js"
        //#include "../src/AwesomePlugin.js"
     
        //jquery-plugin
        if ($){
            $['fn'][pluginName] = function (arg) {
                return this['each'](function(i,e){
                    var $e = $(e);
                    var instance = new AwesomePlugin($e[0], arg);
                    $e.data(pluginName, instance);
                })
            };
        } else {
            window[pluginName] = AwesomePlugin;
        }
    })(window['jQuery'] || window['Zepto']);

    Motivation

    This plugin was created as a fast replacement to preprocessor.js and alike, due to lack of necessary building features in them on that moment, like define, put etc.

    For now homemade has some flaws:

    • Insecure − context is defined in global scope, so that you have to beware of variable names in #define
    • Nested conditions are not supported
    • No decent syntax errors detection

    Projects which use homemade

    License

    Copyright Dmitry Ivanov. Written by Dmitry Ivanov. Licensed under the MIT license.

    Install

    npm i homemade

    DownloadsWeekly Downloads

    3

    Version

    0.3.6

    License

    none

    Last publish

    Collaborators

    • dfcreative