Grunt filerev使用错误的源代码进行源代码处理

时间:2014-12-04 08:48:42

标签: gruntjs source-maps

我刚开始使用Grunt。我试图用Grunt升级一组文件,然后创建该文件的修订版(使用grunt-filerev)。一切都很好,除了文件的源图。

我将我的文件解压缩到一个名为shared.min.js的文件中。我还为此文件创建了一个源图,filerev也为修订后的文件创建了修订文件和源图。这意味着它将生成4个文件:

  • shared.min.js
  • shared.min.js.map
  • shared.min.153987b3.js
  • shared.min.153987b3.js.map

问题是shared.min.153987b3.js.map使用shared.min.js作为它的来源,我认为它应该是shared.min.153987b3.js而不是。正如你在我的Gruntfile中看到的那样,我用一个名为fixFilerevSourcemap的任务来修复它。

然后出现下一个问题:shared.min.153987b3.js使用shared.min.js.map作为它的源图,我认为应该是shared.min.153987b3.js.map。我也应该弄脏这个吗?或者有更好的解决方案吗?

我有以下Grunt配置:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        sourceMap: true,
        sourceMapIncludeSources: true
      },
      dist: {
        files: {
          'somedir/shared.min.js': ['otherdir/file1.js', 'otherdir/file2.js'],
        }
      }
    },
    filerev: {
      options: {
        sourceMap: true
      },
      scripts: {
        src: ['somedir/shared.min.js'],
        dest: 'somedir/'
      }
    }
  });

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

  grunt.registerTask('fixFilerevSourcemap', 'Blaat', function() {
    var revisionedSource;
    for (var file in grunt.filerev.summary) {
      var revisionedFile = grunt.filerev.summary[file];
      if (revisionedFile.substr(revisionedFile.length - 3) == 'map')  {
        if (null == revisionedSource) {
          throw "No revisionedSource found!";
        }
        var mapData = grunt.file.readJSON(revisionedFile);
        mapData.file = basename(revisionedSource);
        grunt.file.write(revisionedFile, JSON.stringify(mapData));
      } else {
        revisionedSource = basename(revisionedFile);
      }
    }
  });

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

  function basename(path, suffix) {
    //  discuss at: http://phpjs.org/functions/basename/
    // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // improved by: Ash Searle (http://hexmen.com/blog/)
    // improved by: Lincoln Ramsay
    // improved by: djmix
    // improved by: Dmitry Gorelenkov
    //   example 1: basename('/www/site/home.htm', '.htm');
    //   returns 1: 'home'
    //   example 2: basename('ecra.php?p=1');
    //   returns 2: 'ecra.php?p=1'
    //   example 3: basename('/some/path/');
    //   returns 3: 'path'
    //   example 4: basename('/some/path_ext.ext/','.ext');
    //   returns 4: 'path_ext'

    var b = path;
    var lastChar = b.charAt(b.length - 1);

    if (lastChar === '/' || lastChar === '\\') {
      b = b.slice(0, -1);
    }

    b = b.replace(/^.*[\/\\]/g, '');

    if (typeof suffix === 'string' && b.substr(b.length - suffix.length) == suffix) {
      b = b.substr(0, b.length - suffix.length);
    }

    return b;
  }
};

0 个答案:

没有答案