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:
//#excludeconsole//#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//#else //#put "var projectName = '" + name + "'"//#endif
Result with DEV === true
:
console
Result with DEV === false
:
var projectName = 'Hello world'
For more examples see test/before.js.
jQuery/Zepto/vanilla plugin boilerplate
build.js
:
{ //#ifndef pluginName var pluginName = "awesomePlugin" //#else /* #put `var pluginName = ` + pluginName */ //#endif //#include "../src/utils.js" //#include "../src/AwesomePlugin.js" //jquery-plugin if $ $'fn'pluginName = { return this'each'{ var $e = ; var instance = $e0 arg; $edatapluginName instance; } }; else windowpluginName = 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.