Krunt

Grunt.js for the new technology Microsoft NET vNext

Download .zip Download .tar.gz View on GitHub

Não chega a ser um port do Grunt.js para a nova tecnologia Microsoft .NET vNext. Eu quero na verdade aproveitar os ótimos conceitos que o Grunt.js nos permite aplicar no fluxo de desenvolvimento (principalmente front-end), e aplicá-los também para definir um fluxo semelhante para o desenvolvimento web na nova tecnologia que a Microsoft está lançando, o ASP.NET vNext.

A ideia inicial é implementar as tarefas mais básicas para o desenvolvimento front-end, principalmente de bibliotecas JavaScript:

  • Concatenar
  • Minificar
  • Assistir (Watch)
  • Empacotar

O Grunt.js se baseia em um arquivo Gruntfile.js que além de conter as configurações. Ex:

grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'),
  uglify: {
    options: {
      banner: '/*! <%= pkg.name %> My Project */\n'
    },
    build: {
      src: 'src/<%= pkg.name %>.js',
      dest: 'build/<%= pkg.name %>.min.js'
    }
  }
});

Também executa código:

grunt.loadNpmTasks('grunt-contrib-uglify');

grunt.registerTask('default', ['uglify']);

Com o Krunt pretendo fazer um pouco diferente, mantendo a configuração em um arquivo de configuração chamado Krunt.json. Nesse caso o registro de tarefas e (talvez) o carregamento de submódulos seja feito também via arquivo de configuração.

As tarefas (aqui leia-se plugin) por sua vez podem ser extendidas, ou seja, poderão ser criadas novas tarefas.

Conclusão

Por enquanto é só uma ideia, mas de acordo com que a implementação for sendo feita, a documentação será atualizada.

Mas basicamente você poderá criar seu projeto:

project.json

{
    "version": "1.0.0-*",
    "dependencies": {
        "E5R.Krunt": "1.0.0-*",
    },
    "commands": {
        "krunt": "E5R.Krunt"
    }
}

krunt.json

{
  "plugins": ["krunt-uglify"],
  "defaultTask": ["uglify"],
  "tasks": {
    "uglify": {
      "options": {
        "banner": "/*! My Project <%= project.version %> */\n"
      },
      "build": {
        "src": "src/<%= project.name %>.js",
        "dest": "build/<%= project.name %>.min.js"
      }
    }
  }
}

E na linha de comando você pode executar uma tarefa específica (ex: uglify):

k krunt uglify

Ou executar a tarefa padrão defaultTask => uglify:

k krunt

Uma opção também será fazer um híbrido, onde o project.json possa também ser usado como arquivo Krunt. Ex:

project.json

{
    "version": "1.0.0-*",
    "dependencies": {
        "E5R.Krunt": "1.0.0-*",
    },
    "commands": {
        "krunt": "E5R.Krunt"
    },
    "krunt": {
      "plugins": ["krunt-uglify"],
      "defaultTask": ["uglify"],
      "tasks": {
        "uglify": {
          "options": {
            "banner": "/*! My Project <%= project.version %> */\n"
          },
          "build": {
            "src": "src/<%= project.name %>.js",
            "dest": "build/<%= project.name %>.min.js"
          }
        }
      }
    }
}