Gruntjs 约曼建造过程

Gruntjs 约曼建造过程,gruntjs,yeoman,Gruntjs,Yeoman,所以我现在用的是我非常喜欢的约曼。我有一个任务要做,那就是抓取我的angular应用程序,使其无服务器。基本上,这意味着抓取所有模板并使用 <script type="text/ng-template" id="dir to template"> ..template html goes here </script> 。模板html位于此处 现在约曼有了自己的gruntfile,而我完全是Grunt的新手,所以我想知道 a) 这应该是grunt处理的任务? b) 我

所以我现在用的是我非常喜欢的约曼。我有一个任务要做,那就是抓取我的angular应用程序,使其无服务器。基本上,这意味着抓取所有模板并使用

<script type="text/ng-template" id="dir to template"> ..template html goes here </script>
。模板html位于此处
现在约曼有了自己的gruntfile,而我完全是Grunt的新手,所以我想知道
a) 这应该是grunt处理的任务?
b) 我应该调整现有的grunt文件还是创建一个新文件?
c) 在哪里可以找到关于如何执行此操作的文档,有什么好主意吗?


谢谢大家!

我们正在努力使Yeoman更易于定制,但与此同时,您可以通过在Grunfile中添加以下内容来覆盖
构建
任务:

grunt.renameTask('build', 'oldbuild');
grunt.registerTask('build', 'your-task oldbuild');
// Clobber the original targets
var targets = {
    // Add as many custom targets as you want, using custom modules, etc.

    // Keep the existing targets
    default   : '               rjs concat css min img rev usemin manifest',
    usemin    : 'usemin-handler rjs concat css img rev usemin manifest',
    text      : 'usemin-handler rjs concat css min     rev usemin manifest',
    buildkit  : 'usemin-handler rjs concat css min img rev usemin manifest html:buildkit',
    basics    : 'usemin-handler rjs concat css min img rev usemin manifest html:basics',
    minify    : 'usemin-handler rjs concat css min img rev usemin manifest html:compress',
    test      : 'usemin-handler rjs concat css img rev usemin manifest',

    yourbuild : 'intro clean mkdirs rjs'
};

// If we clobber targets, we have to rebuild targetList, the below is copy paster from Yeoman.js
var targetList = grunt.log.wordlist(Object.keys(targets));

// We also have to rebuild the build task with the new targetList
grunt.registerTask('build', 'Run a predefined target - build:<target> \n' + targetList,  function(target) {
    var valid = Object.keys(targets);
    target = target || 'usemin';

    if ( valid.indexOf( target ) === -1 ) {
        grunt.log
        .error('Not a valid target')
        .error(grunt.helper('invalid targets', targets));
        return false;
    }

    var tasks = ['intro', 'clean coffee compass mkdirs', targets[target], 'copy time'].join(' ');

    // Now overwrite the task for our costume build
    if( target === 'yourbuild') {
        tasks = targets[target];
    }

    // Conditionally remove compass / manifest task if either compass or
    // phantomjs binary is missing. Done only for `test` target (specifically
    // used for our `npm test`). For each, output warning infos.
    if( target === 'test' ) {
        tasks = grunt.helper( 'build:skip', tasks, 'compass' );
        tasks = grunt.helper( 'build:skip', tasks, 'phantomjs', 'manifest' );
    }

    grunt.log.subhead('Running ' + target + ' target')
    .writeln('  - ' + grunt.log.wordlist(tasks.split(' '), { separator: ' ' }));

    grunt.task.run(tasks);
});
这将允许您将任何想要的任务添加到构建过程中


如果您想进一步定制,您可以替代
build
,只需从约曼提供的任务中拼凑您想要的内容:
usemin handler rjs concat css min img rev usemin manifest html

例如:

grunt.registerTask('build', 'your-task rjs concat css whatever-you-want');

目前无法自定义yeoman构建过程。但您可以使用此解决方法。将以下代码复制到您自己的GrunFile中:

grunt.renameTask('build', 'oldbuild');
grunt.registerTask('build', 'your-task oldbuild');
// Clobber the original targets
var targets = {
    // Add as many custom targets as you want, using custom modules, etc.

    // Keep the existing targets
    default   : '               rjs concat css min img rev usemin manifest',
    usemin    : 'usemin-handler rjs concat css img rev usemin manifest',
    text      : 'usemin-handler rjs concat css min     rev usemin manifest',
    buildkit  : 'usemin-handler rjs concat css min img rev usemin manifest html:buildkit',
    basics    : 'usemin-handler rjs concat css min img rev usemin manifest html:basics',
    minify    : 'usemin-handler rjs concat css min img rev usemin manifest html:compress',
    test      : 'usemin-handler rjs concat css img rev usemin manifest',

    yourbuild : 'intro clean mkdirs rjs'
};

// If we clobber targets, we have to rebuild targetList, the below is copy paster from Yeoman.js
var targetList = grunt.log.wordlist(Object.keys(targets));

// We also have to rebuild the build task with the new targetList
grunt.registerTask('build', 'Run a predefined target - build:<target> \n' + targetList,  function(target) {
    var valid = Object.keys(targets);
    target = target || 'usemin';

    if ( valid.indexOf( target ) === -1 ) {
        grunt.log
        .error('Not a valid target')
        .error(grunt.helper('invalid targets', targets));
        return false;
    }

    var tasks = ['intro', 'clean coffee compass mkdirs', targets[target], 'copy time'].join(' ');

    // Now overwrite the task for our costume build
    if( target === 'yourbuild') {
        tasks = targets[target];
    }

    // Conditionally remove compass / manifest task if either compass or
    // phantomjs binary is missing. Done only for `test` target (specifically
    // used for our `npm test`). For each, output warning infos.
    if( target === 'test' ) {
        tasks = grunt.helper( 'build:skip', tasks, 'compass' );
        tasks = grunt.helper( 'build:skip', tasks, 'phantomjs', 'manifest' );
    }

    grunt.log.subhead('Running ' + target + ' target')
    .writeln('  - ' + grunt.log.wordlist(tasks.split(' '), { separator: ' ' }));

    grunt.task.run(tasks);
});

但是请记住,这段代码是从yeoman源代码中复制的,如果它被更新了,你必须自己做同样的事情。

哇,这太棒了。非常感谢netzzwerg,非常有用。复制内部代码不是这样做的,将来一定会破坏代码。我已经更新了我的答案,以反映出实现同样目标的另一种方式。