【问题标题】:yeoman build processyeoman 构建过程
【发布时间】:2012-11-06 19:53:33
【问题描述】:

所以我目前正在使用我非常喜欢的 Yeoman。我有一个任务要做,就是抓取我的 Angular 应用程序并使其无服务器。基本上这意味着抓取所有模板并将它们插入到 index.html 文件中

<script type="text/ng-template" id="dir to template"> ..template html goes here </script>

现在 yeoman 有自己的 gruntfile,而我完全是 Grunt 的新手,所以我想知道是否
a) 这应该是 grunt 处理的任务?
b) 我应该调整现有的 grunt 文件还是创建一个新文件?
c) 关于在哪里可以找到有关如何执行此操作的文档的任何好主意?

谢谢!

【问题讨论】:

    标签: gruntjs yeoman


    【解决方案1】:

    我们正在努力使 Yeoman 更易于定制,但与此同时,您可以通过将其添加到 Gruntfile 中来覆盖 build 任务:

    grunt.renameTask('build', 'oldbuild');
    grunt.registerTask('build', 'your-task oldbuild');
    

    这将使您可以在构建过程中添加任何您想要的任务。


    如果您想进一步自定义,您可以改写 build,然后从 yeoman 提供的任务中拼凑您想要的内容:usemin-handler rjs concat css min img rev usemin manifest html

    例子:

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

    【讨论】:

      【解决方案2】:

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

      // 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);
      });
      

      现在您可以更改以下行来自定义您自己的构建过程:

      yourbuild : 'intro clean mkdirs rjs'
      

      但请记住,此代码从 yeoman 源代码复制,如果更新,您必须自己执行。

      【讨论】:

      • 哇,这太棒了。非常感谢 netzzwerg,非常有帮助。
      • 复制内部代码不是这样做的方法,并且在将来的某个时间肯定会破坏您的代码。我已经更新了我的答案,以反映您可以实现同样目标的另一种方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2014-04-18
      • 2014-02-09
      • 1970-01-01
      相关资源
      最近更新 更多