求一个Nodejs模板引擎,用于生成代码,可编程性要高一些

求一个Nodejs模板引擎,用于生成代码,可编程性要高一些

最好是可以嵌入js代码,不要求生成html,主要是生成各式各样的代码,如objective-c, c#之类。 所以,我不希望它太聪明,比如说把"转换为@"。像jade这种是不合适的。 求推荐。

4 回复

当然可以。根据你的需求,你可以考虑使用 Nunjucks 这个模板引擎。Nunjucks 是一个功能强大的模板引擎,支持嵌入式 JavaScript,并且非常适合用来生成各种类型的代码文件。

Nunjucks 简介

Nunjucks 是一个由 Mozilla 开发的模板引擎,它的设计灵感来自于 Jinja2 和 Django 的模板系统。它支持过滤器、继承、包含和自定义宏等功能,并且可以方便地嵌入 JavaScript 代码。

示例代码

首先,你需要安装 Nunjucks:

npm install nunjucks

接下来,我们创建一个简单的 Nunjucks 模板来生成 Objective-C 代码:

  1. 创建一个模板文件 template.njk:
// {{ header }}

#import "{{ importPath }}"

@interface {{ className }} : NSObject

@property (nonatomic, strong) {{ propertyType }} *{{ propertyName }};

@end
  1. 在 Node.js 中使用该模板生成代码:
const nunjucks = require('nunjucks');
const fs = require('fs');

// 设置环境
const env = new nunjucks.Environment();

// 渲染模板
const output = env.render('template.njk', {
    header: 'This is a sample Objective-C class',
    importPath: 'Some/Import/Path',
    className: 'MyClass',
    propertyType: 'NSString',
    propertyName: 'myProperty'
});

// 将生成的代码写入文件
fs.writeFileSync('generated_code.m', output);

console.log('Code generated successfully!');

解释

  • 模板文件 (template.njk) 使用 Nunjucks 的语法来定义模板结构。
  • 渲染函数 (env.render) 接受模板路径和上下文对象作为参数,将上下文中的数据插入到模板中生成最终的输出。
  • 生成代码 (output) 包含了根据模板和上下文动态生成的 Objective-C 代码。

通过这种方式,你可以轻松地生成不同语言的代码,而不需要手动编写复杂的字符串拼接逻辑。Nunjucks 提供了丰富的功能来帮助你更高效地生成代码。


其实不建议这么干

因为nodejs的强项不在于做解析,你的逻辑越复杂,需要的计算越大,模板解析的难度越低越好,我用过jade和ejs

jade模板写起来代码很少,但是编译的时候消耗比较大,时间上面大概是ejs的3倍,也就会导致你的请求响应速度慢很多

针对你的需求,推荐使用 Nunjucks 这个模板引擎。Nunjucks 是一个功能强大的模板引擎,支持在模板中嵌入 JavaScript 代码,并且非常适合生成各种类型的代码文件。

示例代码

安装 Nunjucks

首先需要安装 Nunjucks:

npm install nunjucks

创建一个模板文件

假设你要生成 Objective-C 代码,可以创建一个名为 template.njk 的文件,内容如下:

#import "{{ header }}"
 
void {{ method_name }}() {
    // Your code here
}

使用 Nunjucks 生成代码

然后在 Node.js 中使用 Nunjucks 渲染模板并生成 Objective-C 代码:

const nunjucks = require('nunjucks');

// 设置环境变量
const env = new nunjucks.Environment();

// 渲染模板
const output = env.render('template.njk', {
    header: '<stdio.h>',
    method_name: 'myMethod'
});

console.log(output);

输出结果

运行上述代码后,你将得到如下输出:

#import <stdio.h>

void myMethod() {
    // Your code here
}

解释

  1. 模板文件 (template.njk):

    • 使用 Nunjucks 的语法嵌入变量(如 {{ header }}{{ method_name }})。
    • 你可以在这个模板中添加任何你需要的 Objective-C 或其他语言的代码。
  2. 渲染代码:

    • 使用 nunjucks.Environment() 创建环境。
    • 调用 env.render() 方法来渲染模板,传入变量对象(例如 { header: '<stdio.h>', method_name: 'myMethod' })。
  3. 灵活性:

    • 你可以根据实际需要调整模板文件,以生成不同语言的代码,比如 C#、Python 等。

Nunjucks 不仅支持嵌入式 JavaScript,还允许你编写复杂的逻辑和循环,非常适合生成动态代码。

回到顶部