2013-10-03 47 views
2

我正在开发基于神奇的webapp生成器的yeoman生成器,但处理一些不同的东西。我想要实现的一件事是将require.js文件作为一个文件。这意味着不是这个......通过Grunt替换require.js脚本标记

<script data-main="scripts/main" src="bower_components/requirejs/require.js"></script> 

...我想有这样的:

<script scr="scripts/main"></script> 

从require.js,这与几乎没有努力工作。

require.config({ 
    paths: { 
     // ... 
     requireLib: '../bower_components/requirejs/require' 
    } 
}); 

require(['...', 'requireLib'], function (..., requireLib) { 
    // ... 
}); 

我困在Gruntfile.js部分。修改脚本标记的最佳方法是什么?将src和data-main的新值作为data-main的值删除?

+0

你的Gruntfile中正在进行什么? – dezman

+0

它主要是文件'哟webapp'会写一些微小的修改,请看这里:[The Gist](https://gist.github.com/sontags/6813239)...'build'任务应该做标签糖化工作在最后... – sontags

回答

0

自己解决了这个问题。去咕噜正则表达式替换:

​​

而且在Gruntfile.js做到这一点:

module.exports = function (grunt) { 
    // ... 
    require('load-grunt-tasks')(grunt); 

    grunt.initConfig({ 
     // ... 
     'regex-replace': { 
      dist: { 
       src: ['<%= yeoman.dist %>/index.html'], 
       actions: [ 
        { 
         name: 'requirejs-onefile', 
         search: '<script data-main=".*" src="bower_components/requirejs/require.js"></script>', 
         replace: function(match){ 
          var regex = /scripts\/.*main/; 
          var result = regex.exec(match); 
          return '<script src="' + result[0] + '.js"></script>'; 
         }, 
         flags: 'g' 
        } 
       ] 
      } 
     } 
    }); 
} 

运行此...

grunt regex-replace 

...和你做。这样做的工作很好...

干杯

+0

很高兴找到这个!在使用哟webapp开始一个项目后,我被困在同一步骤。有了我发现的所有问题,我不确定发电机是否准备好迎接黄金时段。无论如何,这不适合我,因为uglify和rev任务正在将main.js重命名为[random prefix] .main.min.js之类的东西,所以它不会被脚本拾取。如果我能弄清楚如何获得输出文件的名称,我可以修改它 - 我知道路径,并且在我的配置中只有一个.js文件,所以我想我可以搜索它,但看起来很脆弱。 –