用Grunt预编译车把模板
假设您已经安装了Node.js。如果不这样做,那就去做。
1)设置节点依赖性:
在您的应用程序根目录中,添加一个名为的文件package.json
。将以下内容粘贴到该文件中:
{
"devDependencies": {
"grunt-contrib-handlebars": "~0.6.0",
"grunt-contrib-watch": "~0.5.3",
"handlebars": "~1.3.0"
},
}
此JSON文件告诉Node需要安装哪些软件包。如您将在下一步中看到的那样,这有助于使其他开发人员非常快速地启动和运行。
2)安装节点依赖项:
在终端/命令提示符/ powershell中,cd
进入项目的根目录并运行以下命令:
npm install grunt -g
npm install grunt-cli -g
并安装package.json中列出的依赖项:
npm install
现在,您已经安装了所需的所有节点依赖项。在项目的根目录中,您会看到一个node_modules folder
。
3)配置Grunt:
在您的项目根目录中,创建一个名为的文件Gruntfile.js
。将以下内容粘贴到该文件中:
module.exports = function(grunt) {
var TEMPLATES_LOCATION = "./src/templates/",
TEMPLATES_EXTENSION = ".hbs",
TEMPLATES_OUTPUT_LOCATION = TEMPLATES_LOCATION,
TEMPLATES_OUTPUT_FILENAME = "compiled_templates.js";
grunt.initConfig({
watch: {
handlebars: {
files: [TEMPLATES_LOCATION + '**/*' + TEMPLATES_EXTENSION],
tasks: ['handlebars:compile']
}
},
handlebars: {
compile: {
src: TEMPLATES_LOCATION + '**/*' + TEMPLATES_EXTENSION,
dest: TEMPLATES_OUTPUT_LOCATION + TEMPLATES_OUTPUT_FILENAME,
options: {
amd: true,
namespace: "templates"
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-handlebars');
grunt.loadNpmTasks('grunt-contrib-watch');
}
4)根据自己的喜好进行配置:
如果您没有使用Require.js,则需要更改handlebars.compile.options.amd
为false
。您可能还想namespace
根据自己的喜好调整选项。如果您使用的是require / amd模块,则namespace属性并不重要(如果将其删除,则默认为“ JST”)。
因为所有项目的结构都有些不同,所以您只需要配置Gruntfile。修改常量TEMPLATES_LOCATION
,TEMPLATES_EXTENSION
,TEMPLATES_OUTPUT_LOCATION
,TEMPLATES_OUTPUT_FILENAME
以满足您的项目。
如果您的模板分散在整个应用程序中,则需要更改TEMPLATES_LOCATION
为最低的目录。确保模板与node_modules,bower_components或任何其他第三方目录隔离,因为您不希望Grunt将第三方模板编译为应用程序编译的模板。如果包括所有的在自己的代码./src
,./js
,./app
目录,你会好起来的。
5)用Grunt编译模板:
要在后台运行grunt,请打开终端并cd
进入项目的根目录,然后运行命令:(grunt watch:handlebars
同样grunt watch
适用)。在后台运行grunt时,将自动编译对模板文件的所有更改,并handlebars.compile.dest
根据需要重写指定的输出文件。输出将如下所示:
Running "watch" task
Waiting...
要单独运行编译任务,请打开终端并cd
进入项目的根目录,然后运行命令:(grunt handlebars:compile
同样grunt:handlebars
适用)。输出将类似于:
Running "handlebars:compile" <handlebars> task
File "./src/templates/compiled_templates.js" created.
Done, without errors.