UNPKG

gulp-vash-static

Version:

Gulp plugin for converting Vash razor templates to static html

186 lines (141 loc) 8.11 kB
# gulp-vash-static Gulp plugin for converting Vash razor templates to static html *Keep in mind that this is just a thin wrapper around Vash Static and your issue is most likely with that.* ## Install ``` $ npm install --save-dev gulp-vash-static ``` ## Usage There are a few different functions you can call: - 'precompile': Precompiles a vash templates and generates a json file with the template's name and contents in it. - 'renderPage': Renders a 'page' vash template by name, which should be stored in the cacheDest, with optional helpers. - 'watchModelsAndTemplates': Convenience function for watching models and templates. This is my recommended setup, where all you need to call is 'gulp watch' to get started. ```js var gulp = require('gulp'); var vashStatic = require('gulp-vash-static'); // The default is "pg" anyway, but this is just to show you that you can change it to another directory name if you wish vashStatic.setPageDirType("pg"); var dirTypes = ["pg", "wg", "glb"]; // vashStatic module types var APP = "dev/app/"; var PRECOMP_VASH = "precompiled-vash.json" // aka vash cache gulp.task("precompile-vash", function() { return gulp.src([ APP + "pg/**/*.vash" , APP + "wg/**/*.vash" , APP + "glb/**/*.vash" , "!" + APP + "glb/vash-helpers/*.vash" // leave out any vash helpers you have ]) .pipe(vashStatic.precompile({ debugMode: true, dirTypes: dirTypes, modelsPath: "bld/js/models.js", cacheFileName: PRECOMP_VASH })) .pipe(gulp.dest("bld/")) }) gulp.task("pg-render-static", function() { return gulp.src(APP + "pg/**/*.vash") .pipe(vashStatic.renderPage({ cacheDest: "bld/" + PRECOMP_VASH , helpers: [ APP "glb/vash-helpers/RenderWidget.vash" ] // optionally, you can add or override (same name) with custom helpers , omitSubDir: "tmpl" //omit a subdirectory that you might have that you don't want to be part of the template name })) .pipe(gulp.dest("bld/")) }) // Combines models so they can be injected into templates when rendering. // This is suggested if you need a separate model per page. // Recommend using TypeScript because of it's similar syntax to C# models, which makes integration of Razor front end and back end easier. gulp.task("combine-models", function () { var src = [ APP + "pg/**/mdl/*.ts" , APP + "wg/**/mdl/*.ts" ]; return gulp.src(src) .pipe(ts({ noImplicitAny: true, out: 'models.js' })) .pipe(gulp.dest("bld/js/")); }); /* Watches for any changes in vash templates or models, updates the precompiled template cache (on the file system), then renders the page marked by a flag (eg --home) by calling the 'pg-render-static' task. Note that 'vashStatic.watchModelsAndTemplates' is not a gulp plugin, just a convenience function that abstracts away some complex logic. Returns a stream from gulp plugin 'gulp-watch'. */ gulp.task("watch", function() { var vashSrc = [ // vash templates APP+"pg/**/*.vash" , APP+"wg/**/*.vash" ] , modelSrc = [ // template models APP + "pg/**/mdl/*.ts" , APP + "wg/**/mdl/*.ts" ] return vashStatic.watchModelsAndTemplates({ gulp: gulp // pass in the instance of gulp you are using , vashSrc: vashSrc , modelSrc: modelSrc , modelsDest: "bld/js/models.js" // your combined models to inject when rendering templates , cacheDest: "bld/" + PRECOMP_VASH // cached templates JSON file, generated by 'precompile-vash' task , debugMode: true // should be false for production to keep file size down , dirTypes: dirTypes // module types, eg ['pg', 'wg', 'glb'] , pageTemplatePath: APP + "<%= type %>/<%= moduleName %>/tmpl/<%= fileName %>" // pattern to the vash template, using moduleName from the '--home' flag // existing gulp tasks to call when files are changed , combineModelsTask: 'combine-models' , precompileTask: 'precompile-vash' , pageRenderTask: 'pg-render-static' }) }) ``` ## API ### setPageDirType Vash Static uses modules to organise your templates. By default it assumes you have at least a page module, which is abbreviated to 'pg' and is expected in the directory structure. With 'setPageDirType' you can change this, if you need to. ### getAllArgs Gets the argument from the command-line that starts with '--', omitting the '--' and finishing at the next space. The watch on models cannot detect the exact page that needs to be rendered, so assumes 'Index.vash'. You can specify a different page though by adding a '/MyPageName' (omit the file extension). #### parameters - {string[]} - Optionally pass in custom args, say from a child process when testing. - returns {string} Argument value without the '--' prefix. ### overrideGetAllArgs Allows you to optionally override the functionality of 'getAllArgs', so you can manipulate arguments. First param should be the function and it should return a manipulated string containing the page name. ### restoreGetAllArgs Restores 'getAllArgs' after using 'overrideGetAllArgs'. ### suppressWarnings This can be useful if you don't want to output lots of warnings in things like unit tests (which can be annoying). #### parameters - {boolean} - True to suppress console warnings. False to switch them back on again. ### precompileTemplateCache Precompiles a vash templates and generates a json file with the template's name and contents in it. #### options - {boolean} debugMode (optional) - Production usage should pass false to keep file size down. Development should use true, for useful debugging info. Defaults to false. - {string[]} dirTypes (optional) - List of types. This type will be searched for in the filePath and is expected to be a full directory name. If not given, only page type will be used. - {string} modelsPath (optional) - File path to the combined models js file, which can prepend your templates to provide model data. If not given, no models will be added. - {string} cacheFileName (optional) - Name of the json file output. Defaults to 'precompiled-vash.json'. ### renderPage Precompiles a vash templates and generates a json file with the template's name and contents in it. #### options - {string} cacheDest - Path to the JSON file containing the vash template cache. - {string} omitSubDir (optional) - If given, will remove the first occurance of a sub-directory with this name when generating the template name. - {string[]} helpers (optional) - Array of paths to use as Vash helpers. Defaults will be used, unless overridden by name. Otherwise both lists will be used. ### watchModelsAndTemplates Convenience function for watching models and templates #### options - {object} gulp - instance of gulp - {string} vashSrc - vash templates to watch (accepts globbing) - {string} modelSrc - models to watch (accepts globbing) - {string} modelsDest - path to the models JS destination (once they are combined) - {string} cacheDest - path to the template cache destination - {boolean} debugMode - If this is for production, should be false - {string[]} dirTypes - Module types (eg "pg", "wg", glb), which correspond to parent directory name of template modules. - {string} pageTemplatePath - String for determining the path of the page-level template, where only the page name is known (eg "<%= type %>/<%= moduleName %>/tmpl/<%= fileName %>"). - {string} combineModelsTask - Gulp task name for combining your models - {string} precompileTask - Gulp task name for pre-compiling your vash templates - {string} pageRenderTask - Gulp task name for rendering a page ## Release notes: - Version 2.0.0 introduced some breaking API changes: 1. `getFirstArg` was replaced by `getAllArgs` 2. `overrideGetFirstArg` was replaced by `overrideGetAllArgs` 3. `restoreGetFirstArg` was replaced by `restoreGetAllArgs` ## License MIT © [Jim Doyle](http://jimdoyle.com.au)