Skip to content

Instantly share code, notes, and snippets.

@2no
Last active December 13, 2015 21:18
Show Gist options
  • Save 2no/4976528 to your computer and use it in GitHub Desktop.
Save 2no/4976528 to your computer and use it in GitHub Desktop.
某サイトのマネ。Resource.get をテンプレートに用意して、更新日時を src の最後に追加してキャッシュ対策。 $ npm install grunt-contrib grunt-templater ejs
module.exports = function(grunt) {
'use strict';
var
/**
* ルートパス
*
* @constant
* @type {string}
*/
ROOT_PATH = '.',
/**
* テンプレートパス
*
* @constant
* @type {string}
*/
TEMPLATE_PATH = ROOT_PATH + '/templates',
/**
* テンプレート変数
*
* @type {object}
*/
variables = {
Resource: {
get: function(src) {
var stat,
filename = process.cwd() + '/' + src,
fs = require('fs');
try {
stat = fs.statSync(filename);
src += '?' + new Date(stat.mtime).getTime();
}
catch (e) {
console.log(e.message);
}
return src;
}
}
};
grunt.file.setBase(ROOT_PATH);
grunt.initConfig({
watch: {
templates: {
files: [TEMPLATE_PATH + '/**/*.ejs'],
tasks: 'template',
},
},
template: {
test: {
src: TEMPLATE_PATH + '/test.ejs',
dest: ROOT_PATH + '/test.html',
variables: merge(variables, {
// テンプレート毎に変数が必要であれば、
// '変数名': 代入する値
}),
},
}
});
grunt.loadNpmTasks('grunt-templater');
grunt.registerTask('default', 'template');
function merge()
{
var result = {}, i, iz, key;
for (i = 0, iz = arguments.length; i < iz; i++) {
if (arguments[i] instanceof Object) {
for (key in arguments[i]) {
if (arguments[i].hasOwnProperty(key)) {
result[key] = arguments[i][key];
}
}
}
}
return result;
}
};
<!-- templates/test.ejs -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<img src="<%= Resource.get('img/test.png') %>">
</body>
</html>
<!-- 出来上がり -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<img src="img/test.png?1361182310000">
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment