2015-03-14 3 views
0

Например, у меня есть такие JSON:Как создать файл с Node.js

{ 
    "extends": "core-range", 
    "dependencies": [ 
    "paper-progress", 
    "paper-input" 
    ], 
    "jsdoc": [ 
    { 
     "description": "Fired when the slider's value changes.", 
     "kind": "event", 
     "name": "core-change", 
     "longname": "event:core-change" 
    }, 
    { 
     "name": "snaps", 
     "kind": "member", 
     "longname": "snaps", 
     "scope": "global" 
    }, 
    { 
     "name": "pin", 
     "kind": "member", 
     "longname": "pin", 
     "scope": "global" 
    }, 
    { 
     "name": "disabled", 
     "kind": "member", 
     "longname": "disabled", 
     "scope": "global" 
    } 
    ] 
} 

Мне нужно создать такой Java класс:

import com.google.gwt.core.client.js.JsProperty; 
import com.google.gwt.core.client.js.JsType; 
import com.google.gwt.user.client.EventListener; 

@JsType(prototype = "HTMLElement", isNative = true) 
public interface PaperSlider extends HTMLElement , CoreRange { 
    Class<?>[] dependencies = new Class<?>[]{PaperProgress.class, PaperInput.class}; 

    void addEventListener(String event, EventListener listener); 

    @JsProperty PaperSlider snaps(boolean val); 
    @JsProperty boolean snaps(); 

    @JsProperty PaperSlider pin(boolean val); 
    @JsProperty boolean pin(); 

    @JsProperty PaperSlider disabled(boolean val); 
    @JsProperty boolean disabled(); 
} 

Какой самый лучший способ создать его? Возможно, имеет смысл использовать шаблоны. Самая сложная часть - генерация методов.

Я не нашел ни одного модуля Node.js, который поддерживает повторяющиеся шаблоны.

BTW, у меня есть много файлов JSON, и я собираюсь добавить это в свою задачу Gulp для генерации некоторых исходных файлов.

+0

Не могли бы вы использовать несколько взаимно-рекурсивных функций для этого? В принципе это своего рода рекурсивный парсер. – SpiderPig

ответ

3

Существует несколько способов сделать это. Я бы рекомендовал сделать это через grunt.

Установите ворчание по всему миру:

npm install grunt-cli -g 

Затем установите локальный пехотинца (в текущем каталоге):

npm install grunt 

Создать шаблон (class.tmpl):

import com.google.gwt.core.client.js.JsProperty; 
import com.google.gwt.core.client.js.JsType; 
import com.google.gwt.user.client.EventListener; 

@JsType(prototype = "HTMLElement", isNative = true) 
public interface PaperSlider extends HTMLElement , CoreRange { 
    Class<<%= className %>>[] dependencies = new Class<<%= className %>>[]{PaperProgress.class, PaperInput.class}; 

    void addEventListener(String event, EventListener listener); 

    <% _.forEach(methods,function(method){ %> 
     <%= method.description && ("// " + method.description) %> 
     @JsProperty PaperSlider <%= method.name %>(boolean val); 
     @JsProperty boolean <%= method.name %>(); 
    <% }) %> 

} 

И, наконец, создать Gruntfile.js:

// config is your JSON file 
// Yes, you can require json files 
var config = require("./config"); 

module.exports = function(grunt) { 
    grunt.registerTask("makeClass",function() { 
     var template = grunt.file.read("./class.tmpl"); 
     var fileData = grunt.template.process(template,{ 
      data: { 
       methods: config.jsdoc, 
       className: "JSClass" 
      } 
     }); 
     grunt.file.write("./class.java", fileData); 
    }) 

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

Теперь просто запустите grunt.

+0

Благодарим вас за хороший ответ. Я уже использую gulp в своем проекте, и я не хочу добавлять другой инструмент сборки. –

+0

Я думаю, [gulp-template] (https://github.com/sindresorhus/gulp-template) должен работать аналогичным образом. Но документации нет вообще. –

Смежные вопросы