gulp-iz-preprocessor
v1.0.3
Published
Comment-based preprocessor.
Readme
gulp-iz-preprocessor
Comment-based preprocessor.
Install
npm install gulp-iz-preprocessor --save-devOverview of Comment-based preprocessor
- Build for each targets
- Definition of importable and import.
- Move code blocks for optimized build.
1. Build for each targets
src.js
- Wrap if-block by remove range(
//_{~//_}). - Then define target ranges(
//_{@XX~//_}@XX).
//_{
if(UA.PC){
//_{@PC
console.log('I am PC.');
//_}@PC
} else if(UA.iOS){
//_{@iOS
console.log('I am iOS.');
//_}@iOS
} else {
//_{@Android
console.log('I am Android.');
//_}@Android
};
//_}You will get those 3 files.
PC.js
//_{@PC
console.log('I am PC.');
//_}@PCiOS.js
//_{@iOS
console.log('I am iOS.');
//_}@iOSAndroid.js
//_{@Android
console.log('I am Android.');
//_}@Android2. Importable definition and import
Importable definition at library.js.
//_{+ajax
console.log('Implementation of Ajax.');
//_}+ajaxImport at main.js.
//!ajax
function main(){
console.log('I can call Ajax!');
};3. Move code blocks for optimized build.
Move to top
Collecting to the top for optimized build. For example, Collect each @enum definitions for Closure Compiler.
//_<top
/**
* @enum {number}
*/
project.TriState = {
TRUE : 1,
FALSE : -1,
MAYBE : 0
};
//_>topMove to bottom
Collecting to the bottom for optimized build. For example, Collect each @media blocks for Clean CSS.
h1 { background : #000; }
/* //_<bottom99 */
@media print {h1 { background : #fff; }}
/* //_>bottom99 */
h1 { color : red; }
/* //_<bottom50 */
@media handheld, only screen and (max-width: 479px) {h1 { color : green; }}
/* //_>bottom50 */
/* //_<bottom99 */
@media print {h1 { color : #000; }}
/* //_>bottom99 */h1 { background : #000; }
h1 { color : red; }
/* //_<bottom50 */
@media handheld, only screen and (max-width: 479px) {h1 { color : green; }}
/* //_>bottom50 */
/* //_<bottom99 */
@media print {h1 { background : #fff; }}
/* //_>bottom99 */
/* //_<bottom99 */
@media print {h1 { color : #000; }}
/* //_>bottom99 */Extended comments
Definitions
| Extended comments | Name | Description |
|:---------------------------|:--------------------------|:-------------------------|
| //@PC | Build target definition | |
| //#mobile[@iOS,#WinMobi] | Group definition | //#xx[<@xx/#xx>, ...] |
| //+XHR | Importable definition | |
| //+ajax[+XHR,+MSXML] | Importable with dependent | //+xx[+xx, ...] |
| //!ajax | Import | |
Range
| Extended comments | Name | Description |
|:---------------------------|:---------------------------------|:-------------------------|
| //_{ | Remove range | remove |
| //_{@PC | Target range | keep if @PC |
| //_{#mobile | Group range | keep if #mobile |
| //_{@PC,#mobile | Multi targets range | //_{<@xx/#xx>, ... |
| //_{+ajax | Importable range | keep if "+ajax" imported |
| //_{^@iOS | Not range | keep without @iOS |
| //_<top | Move to top range | move to top for optimized builds |
| //_<bottom50 | Move to bottom range | //_<bottom(Order:0~100) move to bottom for optimized builds |
Usage in gulp task
const gulp = require('gulp'),
output = './public/css';
/* -------------------------------------------------------
* gulp css
*/
const izpp = require('gulp-iz-preprocessor'),
sass = require("gulp-sass"),
gcmq = require("gulp-group-css-media-queries"),
cleanCSS = require("gulp-clean-css");
gulp.task('css', function(){
return gulp.src([
"./Library/src/scss/**/*.scss",
"./src/scss/**/*.scss"
])
.pipe(
izpp({
fileType : 'scss',
log : false,
tasks : [
{ name : 'desktop', imports : [ 'desktopOnly' ], dir : 'pc' },
{ name : 'mobile' , imports : [ 'mobileOnly' ], dir : 'mob' }
]
})
)
.pipe(sass())
.pipe(gcmq())
.pipe(cleanCSS())
.pipe(gulp.dest(output));
});Initialization options
| Name | Type | Description | Optional |
|:-----------|:----------------------|:-------------------|:---------|
| fileType | String | extname | |
| log | Boolean | Show console.log() | v |
| tasks | Array.<Task object> | Task object array | v |
Task object
| Name | Type | Description | Optional |
|:------------|:-----------------|:--------------------------|:---------|
| name | String | Task name for log | v |
| targets | Array.<String> | [ "mobile" ] | v |
| imports | Array.<String> | [ "Ajax" ] | v |
| dir | String | Output file directory | v(*1) |
| prefix | String | Output file name prefix | v(*1) |
| importFor | Object | { mobile : [ "Ajax" ] } | v |
- When registering two or more tasks, dir or prefix must be specified. If not specified, later tasks will overwrite earlier tasks. Only files for later tasks are output!
Links
- Previous version : iz preprocessor VS Code extenshon
Projects in use
- web-doc-base "Super project for itozyun's Web document projects"
- OutCloud "itozyun's blog"
Enjoy!
