使用 grunt 生成模板 - 寻找任务
generating templates with grunt - looking for a task
我有一个包含以下内容的 HTML 文件:
<html>
<body>
<span>{{ secret }}</span>
</body>
</html>
我正在寻找可以获取此源文件的 grunt 任务,获取值映射:
grunt.initConfig({
myTask: {
myTarget: {
src: ...
dest: ...
values: {
secret: 'ABC'
}
}
}
})
并生成输出文件:
<html>
<body>
<span>ABC</span>
</body>
</html>
有这样的任务吗?我看到了 grunt-mustache-html 但它迫使很多东西存在,而我真的不需要也不想使用它。我只想取一个小胡子(或 hbs 或其他),用 grunt 级对象的数据填充它,并将结果转储到另一个 HTML 文件中,仅此而已。
我以前用过grunt-include-replace。易于使用。在您的 gruntfile 中,您将创建一个与此类似的任务(示例取自官方 github repo):
grunt.initConfig({
includereplace: {
your_target: {
options: {
// Task-specific options go here.
},
// Files to perform replacements and includes with
src: '*.html',
// Destination directory to copy files to
dest: 'dist/'
}
}
})
你可以试试 grunt-template which processed lo-dash templates。这是解决您的问题的基本设置:
//Gruntfile.js
config.template = {
myTask: {
options: {
data: function () {
return {
secret: 'ABC'
};
}
},
files: {
'output.html: ['template.html.tpl']
}
}
};
//template.html.tpl
<html>
<body>
<span><%= secret %></span>
</body>
</html>
#1。一种选择是使用 grunt.template
实用程序(请参阅 lagerone 的回答)。使用自定义分隔符,您可以获得与您想要的非常接近的结果:
grunt.template.addDelimiters('myDelimiters', '{{', '}}');
在这种情况下,您的模板必须使用 {{= secret }}
标签。
#2。另一种选择是您始终可以编写自己的简单任务。在您的情况下,它可能如下所示:
grunt.initConfig({
myTask: {
options: {
data: {
secret: 'ABC'
},
src: 'index.html',
dest: 'index.output.html'
}
}
});
grunt.registerTask('myTask', function() {
var options = this.options(),
template = grunt.file.read(options.src);
var content = template.replace(/\{\{\s*(.*?)\s*\}\}/g, function(a, b) {
return typeof options.data[b] !== undefined ? options.data[b] : '';
});
grunt.file.write(options.dest, content);
});
grunt.registerTask('default', ['myTask']);
我有一个包含以下内容的 HTML 文件:
<html>
<body>
<span>{{ secret }}</span>
</body>
</html>
我正在寻找可以获取此源文件的 grunt 任务,获取值映射:
grunt.initConfig({
myTask: {
myTarget: {
src: ...
dest: ...
values: {
secret: 'ABC'
}
}
}
})
并生成输出文件:
<html>
<body>
<span>ABC</span>
</body>
</html>
有这样的任务吗?我看到了 grunt-mustache-html 但它迫使很多东西存在,而我真的不需要也不想使用它。我只想取一个小胡子(或 hbs 或其他),用 grunt 级对象的数据填充它,并将结果转储到另一个 HTML 文件中,仅此而已。
我以前用过grunt-include-replace。易于使用。在您的 gruntfile 中,您将创建一个与此类似的任务(示例取自官方 github repo):
grunt.initConfig({
includereplace: {
your_target: {
options: {
// Task-specific options go here.
},
// Files to perform replacements and includes with
src: '*.html',
// Destination directory to copy files to
dest: 'dist/'
}
}
})
你可以试试 grunt-template which processed lo-dash templates。这是解决您的问题的基本设置:
//Gruntfile.js
config.template = {
myTask: {
options: {
data: function () {
return {
secret: 'ABC'
};
}
},
files: {
'output.html: ['template.html.tpl']
}
}
};
//template.html.tpl
<html>
<body>
<span><%= secret %></span>
</body>
</html>
#1。一种选择是使用 grunt.template
实用程序(请参阅 lagerone 的回答)。使用自定义分隔符,您可以获得与您想要的非常接近的结果:
grunt.template.addDelimiters('myDelimiters', '{{', '}}');
在这种情况下,您的模板必须使用 {{= secret }}
标签。
#2。另一种选择是您始终可以编写自己的简单任务。在您的情况下,它可能如下所示:
grunt.initConfig({
myTask: {
options: {
data: {
secret: 'ABC'
},
src: 'index.html',
dest: 'index.output.html'
}
}
});
grunt.registerTask('myTask', function() {
var options = this.options(),
template = grunt.file.read(options.src);
var content = template.replace(/\{\{\s*(.*?)\s*\}\}/g, function(a, b) {
return typeof options.data[b] !== undefined ? options.data[b] : '';
});
grunt.file.write(options.dest, content);
});
grunt.registerTask('default', ['myTask']);