homemade
v0.3.6
Published
C-like JS preprocessor
Downloads
39
Maintainers
Readme
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 #if
s.
#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.