homemade v0.3.6
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)
//#endResult:
Useful when you want to remove supporting code from the build, like helper functions etc.
#include — inserts file
Source:
//#include ./c.jsc.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 + "'"
//#endifResult 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.