Created
May 24, 2014 01:11
-
-
Save doowb/ca6f3321a05f6ac727e5 to your computer and use it in GitHub Desktop.
Loading page data from json files and dynamically building page objects to pass into Assemble options.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var _ = require('lodash'); | |
var path = require('path'); | |
module.exports = function(grunt) { | |
// load the recipe template from the desired path | |
var recipeTemplate = grunt.file.read('./src/templates/pages/recipe.hbs'); | |
// expand the data files and loop over each filepath | |
var pages = _.flatten(_.map(grunt.file.expand('./src/data/recipe*.json'), function(filepath) { | |
// read in the data file | |
var data = grunt.file.readJSON(filepath); | |
// create a 'page' object to add to the 'pages' collection | |
return { | |
// the filename will determine how the page is named later | |
filename: path.basename(filepath, path.extname(filepath)), | |
// the data from the json file | |
data: data, | |
// add the recipe template as the page content | |
content: recipeTemplate | |
}; | |
})); | |
// Project configuration. | |
grunt.initConfig({ | |
config: { | |
src: 'src', | |
dist: 'dist' | |
}, | |
assemble: { | |
pages: { | |
options: { | |
flatten: true, | |
assets: '<%= config.dist %>/assets', | |
layout: '<%= config.src %>/templates/layouts/default.hbs', | |
data: '<%= config.src %>/data/*.{json,yml}', | |
partials: '<%= config.src %>/templates/partials/*.hbs', | |
// add the pages array from above to the pages collection on the assemble options | |
pages: pages | |
}, | |
files: [ | |
// currently we need to trick grunt and assemble into putting the pages file into the correct | |
// place using this pattern | |
{ dest: './dist/', src: '!*' } | |
] | |
} | |
} | |
}); | |
grunt.loadNpmTasks('assemble'); | |
grunt.registerTask('default', [ | |
'assemble' | |
]); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is there a
gulpfile.js
version of this dynamic build task posted anywhere?I've got as far as:
But it's just building out the first post to
dist/undefined.
. Ideally I'd like the posts to go todist/posts/A.html
,dist/posts/B.html
, etc., while the main pages go todist/index.html
,dist/contact.html
, etc.