Nodejs grunt-cptpl插件发布,用于将文本模板文件编译成javascript文件,欢迎使用。

Nodejs grunt-cptpl插件发布,用于将文本模板文件编译成javascript文件,欢迎使用。

Github欢迎Fork&Star: https://github.com/hanan198501/grunt-cptpl

grunt-cptpl插件可以将您的文本模板文件编译成javascript文件。在前端开发的时候,模板文本我们一般存放在一个隐藏dom节点,再通过javascript去获取这个节点的内容,将其编译。或者在写javascript的时候,我们手动通过拼接字符串的方式储存模板文本。 grunt-cptpl使前端开发也可以像后端一样,把模板文本存放在单独的文件中,使我们的开发工作从繁琐的dom操作和拼串中解放出来,提高我们的开发效率。最主要的,模板文件作为单独文件存放,可以使我们的项目代码逻辑更加清晰,更具可维护性。

#####grunt-cptpl都做了啥? grunt-cptpl会读取每个模板文件的文本内容,用指定模板引擎的预编译方法将其包裹起来,生成一个新的javascript文件。这个javascript文件文件里面的内容,其实就是模板引擎的预编译方法调用,传入的参数为模板文件的文本内容。这样我们就有了一个编译好的模板函数,要渲染的时候把数据传给它就好了。

入门

这个插件需要Grunt ~0.4.4

如果你还没有使用过Grunt, 务必阅读一下它的入门指南, 里面介绍了如何创建一个Grunt配置文件以及如何安装和使用grunt插件。一旦你熟悉这个过程,你可以使用如下命令安装grunt-cptpl。

npm install grunt-cptpl --save-dev

一旦插件被安装, 可以在Gruntfile里面添加如下代码来启用:

grunt.loadNpmTasks('grunt-cptpl');

配置 “cptpl” task

概观

在项目的Gruntfile文件中, 有一个grunt.initConfig()方法, 在里面添加一个cptpl数据对象。 options为目标任务的自定义选项,选填。 files为文件列表的输出目录和对应的原文件列表。如下面代码里, ['test/html/abc.html', 'test/html/abc2.html', 'mytemplate/*'] 为原文件列表, 'tmp/' 为输出的目录,支持通配符 *

grunt.initConfig({
    cptpl: {
        your_target: {
            options: {
                // 任务特定的选项放在这里
            },
            files: {
                // 目标特定的文件列表放在这里
                'tmp/': ['test/html/abc.html', 'test/html/abc2.html', 'mytemplate/*']
            }
    },
},

});

选项

options.banner

Type: String , Default value: ''

在生成的javascript文件开头写入的文本信息,通常为一段javascript注释文字,如 /*BANNER*/

options.engine

Type: String , Default value: 'handlebars'

指定模板引擎,内置支持的模板引擎有(注意要小写): 'handlebars''hogan''underscore''juicer''dot''kissy''baidutemplate'

Example: 运行下面cptpl任务,将会把 test/html/ 目录下的 abc.html 编译成 abc.js , 存放在 tmp/ 目录。

cptpl: {
    test: {
        options: {
            banner: '/*BANNER*/\n',
            engine: 'dot'
        },
        files: {
            'tmp/': ['test/html/abc.html']
        }
    }
}

abc.htmlabc.js 的内容如下:

//abc.html中的内容:
<h1>{{title}}</h1>
<p>{{content}}</p>

//编译后,abc.js中的内容: /BANNER/ ;window.abc = doT.template(’<h1>{{title}}</h1><p>{{content}}</p>’);

options.context

Type: String , Default value: 'window'

指定生成的javascript文件中编译好的模板函数的上下文对象, 如果此选项的值为 '{AMD}',则把编译好的模板函数包装成一个AMD模块,如果此选项的值为 '{CMD}', 则把编译好的模板函数包装成一个CMD模块。

Example:

cptpl: {
    test: {
        options: {
            engine: 'dot',
            context: 'myObj'
        },
        files: {
            'tmp/': ['test/html/abc.html']
        }
    }
}

// context: ‘myObj’ // abc.js ==> ;myObj.abc = doT.template(’<h1>{{title}}</h1><p>{{content}}</p>’);

// context: ‘{AMD}’ // abc.js ==> ;define(function() { return doT.template(’<h1>{{title}}</h1><p>{{content}}</p>’); });

// context: ‘{CMD}’ // abc.js ==> ;define(function(require, exports, module) { module.exports = doT.template(’<h1>{{title}}</h1><p>{{content}}</p>’); });

options.reName

Type: Function , Default value: function (name) {return name;}

重命名方法,接受一个参数,参数值为源文件名, 此方法的返回值将作为生成的javascript文件名,以及模板函数挂载到的上下文对象属性名。

Example: 下面代码将生成的javascript文件名前面都加上 __abc.html 将生成 __abc.js

cptpl: {
    test: {
        options: {
            engine: 'dot',
            reName: function (name) {
                return '__' + name;
            }
        },
        files: {
            'tmp/': ['test/html/abc.html']
        }
    }
}

// __abc.js ==> ;window.__abc = doT.template(’<h1>{{title}}</h1><p>{{content}}</p>’);

options.customEngines

Type: Object , Default value: {}

自定义模板引擎预编译包裹方法。如果内置模板引擎无法满足您,可以通过此选项设置一个你需要的模板引擎预编译包裹方法。格式为 {name: function(t){}}name为模板引擎名, 对应的function(t){}就是包裹方法,接受一个参数t, t为模板文件的文本内容, 您可以拼成用编译函数包裹起来的js代码,并把包裹后的结果作为函数返回值。

Example:

cptpl: {
    test: {
        options: {
            engine: 'myEngine',
            customEngines: {
                myEngine: function (t) {
                    return 'myEngine.compile(' + t + ');'
                }
            }
        },
        files: {
            'tmp/': ['test/html/abc.html']
        }
    }
}

// abc.js ==> ;window.abc = myEngine.compile(’<h1>{{title}}</h1><p>{{content}}</p>’);


2 回复

Nodejs grunt-cptpl插件发布,用于将文本模板文件编译成javascript文件,欢迎使用

Github欢迎Fork&Star:

grunt-cptpl插件介绍

grunt-cptpl插件可以将您的文本模板文件编译成JavaScript文件。在前端开发过程中,模板文本通常存储在一个隐藏的DOM节点中,再通过JavaScript获取该节点的内容并进行编译。或者在编写JavaScript时,通过手动拼接字符串的方式存储模板文本。

grunt-cptpl使得前端开发可以像后端开发一样,将模板文本存储在单独的文件中,从而简化DOM操作和字符串拼接,提高开发效率。此外,将模板文件独立存储还能使项目代码逻辑更加清晰,更具可维护性。

grunt-cptpl功能概述

grunt-cptpl会读取每个模板文件的文本内容,并使用指定模板引擎的预编译方法将其包裹起来,生成一个新的JavaScript文件。生成的JavaScript文件包含模板引擎的预编译方法调用,传入参数为模板文件的文本内容。这样我们就能得到一个编译好的模板函数,在渲染时只需传入数据即可。

入门指南

该插件需要Grunt ~0.4.4版本。

如果您还未使用过Grunt,建议先阅读其入门指南,了解如何创建一个Grunt配置文件以及如何安装和使用Grunt插件。一旦熟悉这些步骤,您可以使用以下命令安装grunt-cptpl

npm install grunt-cptpl --save-dev

安装完成后,可以在Gruntfile中加载该插件:

grunt.loadNpmTasks('grunt-cptpl');

配置 “cptpl” 任务

在项目的Gruntfile文件中,通过grunt.initConfig()方法添加一个cptpl数据对象。options为目标任务的自定义选项,files为文件列表的输出目录和对应的原文件列表。例如:

grunt.initConfig({
    cptpl: {
        your_target: {
            options: {
                // 任务特定的选项放在这里
            },
            files: {
                // 目标特定的文件列表放在这里
                'tmp/': ['test/html/abc.html', 'test/html/abc2.html', 'mytemplate/*']
            }
        },
    },
});

示例配置

假设我们要将test/html/abc.html编译成abc.js,存放在tmp/目录下,并添加注释头部。我们可以这样配置:

grunt.initConfig({
    cptpl: {
        test: {
            options: {
                banner: '/*BANNER*/\n',
                engine: 'dot'
            },
            files: {
                'tmp/': ['test/html/abc.html']
            }
        }
    }
});

编译前的HTML模板内容如下:

<!-- abc.html -->
<h1>{{title}}</h1>
<p>{{content}}</p>

编译后的JavaScript文件内容如下:

/*BANNER*/
;window.abc = doT.template('<h1>{{title}}</h1><p>{{content}}</p>');

其他配置选项

  • options.context: 指定生成的JavaScript文件中编译好的模板函数的上下文对象。

    grunt.initConfig({
        cptpl: {
            test: {
                options: {
                    engine: 'dot',
                    context: 'myObj'
                },
                files: {
                    'tmp/': ['test/html/abc.html']
                }
            }
        }
    });
    
  • options.reName: 重命名方法,用于自定义生成的JavaScript文件名。

    grunt.initConfig({
        cptpl: {
            test: {
                options: {
                    engine: 'dot',
                    reName: function (name) {
                        return '__' + name;
                    }
                },
                files: {
                    'tmp/': ['test/html/abc.html']
                }
            }
        }
    });
    
  • options.customEngines: 自定义模板引擎预编译包裹方法。

    grunt.initConfig({
        cptpl: {
            test: {
                options: {
                    engine: 'myEngine',
                    customEngines: {
                        myEngine: function (t) {
                            return 'myEngine.compile(' + t + ');'
                        }
                    }
                },
                files: {
                    'tmp/': ['test/html/abc.html']
                }
            }
        }
    });
    

通过以上配置,您可以根据需求灵活地使用grunt-cptpl插件来编译模板文件,提高前端开发效率。


在这个帖子中,我们将介绍如何使用grunt-cptpl插件来将文本模板文件编译成JavaScript文件,从而简化前端模板的管理。grunt-cptpl插件允许我们将模板文件分离出来,让代码结构更清晰,便于维护。

示例代码

首先确保你已经安装了Grunt ~0.4.4版本:

npm install -g grunt-cli

然后安装grunt-cptpl插件:

npm install grunt-cptpl --save-dev

接下来,在你的项目中创建或更新Gruntfile.js文件,添加如下配置:

module.exports = function(grunt) {
    grunt.initConfig({
        cptpl: {
            options: {
                banner: '/* Template compiled by grunt-cptpl */\n',
                engine: 'handlebars',
                context: 'templates'
            },
            dist: {
                files: {
                    'dist/templates/': ['src/templates/*.html']
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-cptpl');

    grunt.registerTask('default', ['cptpl']);
};

在这个配置中,我们设置了模板引擎为handlebars,并且指定了编译后的模板函数会挂载到全局变量templates下。所有位于src/templates/目录下的.html文件将被编译并输出到dist/templates/目录。

示例文件结构

  • src/templates/

    • header.html
    • footer.html
  • dist/templates/

    • header.js
    • footer.js

编译后文件内容

例如,假设src/templates/header.html内容如下:

<div id="header">
    <h1>{{title}}</h1>
</div>

编译后的dist/templates/header.js内容将是:

/* Template compiled by grunt-cptpl */
;templates.header = Handlebars.compile('<div id="header">\n    <h1>{{title}}</h1>\n</div>');

这样,我们就可以在JavaScript中通过templates.header(data)来渲染模板。

通过这种方式,我们可以轻松地管理模板文件,提高代码的可维护性和开发效率。

回到顶部