使用filerev grunt usemin后删除旧文件

时间:2015-07-13 10:51:51

标签: javascript gruntjs minify grunt-usemin

我正在使用usemin生成我的JS和CSS文件 - 所有这些都是非常标准的方式。

我遇到的唯一问题是我想从我的dist中删除旧的编译文件。

我的咕噜声配置是:

grunt.registerTask('build',['jshint','copy','html2js:main','useminPrepare','concat:generated','cssmin:generated','uglify:generated','filerev','usemin','html2js:embed','clean:build']);
grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        default: {},            
        useminPrepare: {
            html: 'index.html',
            options: {
                dest: 'dist',
                flow: {
                    steps: {
                        nominjs: ['concat'],
                        js: ['concat','uglifyjs'],
                        css: ['concat','cssmin']
                    },
                    post: {}
                }
            }
        },
        filerev: {
            options: {
                encoding: 'utf8',
                algorithm: 'md5',
                length: 8
            },
            source: {
                files: [{
                    src: [
                        'dist/assets/css/ipp-styles.min.css',
                        'dist/scripts/ipp-scripts.min.js',
                        'dist/scripts/ipp-libs.js',
                        'dist/scripts/ipp-templates.min.js'
                    ]
                }]
            }
        },
        usemin: {
            html:['dist/index.html'],
            options: {
                blockReplacements: {
                    nominjs: function(block){
                        return '<script src="'+block.dest+'"></script>';
                    }
                }
            }
        },
        clean: {
            build: ['.tmp']
        },
        copy: {  
            html: {
                files: [
                    {expand:true, src:['index.html'], dest: 'dist'},
                    {expand:true, src:['.htaccess'], dest: 'dist'}                        
                ]
            },
            assets: {
                files: [
                    {expand:true, src:['assets/images/**','assets/fonts/**','assets/js/**'], dest: 'dist'}
                ]
            },
            libs: {
                files: [
                    {expand:true, src:['libs/forge.min.js'], dest: 'dist'},
                ]
            },
            config: {
                files: [
                    {expand:true, src:['config/config_diff.js'], dest:'dist', rename: function(dest,src){
                        return dest + '/' + src.replace(/\.js$/,"_sample.js");
                    }},
                ]
            }                
        },
        jshint: {
            options: {
                force: true,
                esnext: true
            },
            all: [
                'config/*.js',
                'scripts/**/*.js',
                '!scripts/ipp-scripts*'
            ]
        },
        uglify: {
            options: {
                compress: {
                    drop_console: true
                }
            }
        },            
        html2js: {
            main: {
                options: {
                    base:''
                },
                src: ['views/**/*.html'],
                dest: 'dist/scripts/templates.js'
            }
        }
    });

我会说,没什么特别的。一切都很好,只有&#34;问题&#34;我有的是,经过几次构建,​​我最终得到了这个:

enter image description here

然后我必须去手动删除旧文件。

在grunt运行期间有没有办法删除它们?我可以删除&#34; ipp-scripts.min *&#34;运行后,但我需要排除当前使用的那个......

感谢您的建议

1 个答案:

答案 0 :(得分:0)

我想在设置时我没有直接思考。解决方案比我预期的要容易得多。

简单地:

service = new google.maps.places.PlacesService(map);

var request = {
    query: "Eiffel Tower",
    types: ["point_of_interest"]
}

function extractTopLandmark(results, status) {
    // Give up if no landmark was found
    if (status != google.maps.places.PlacesServiceStatus.OK) return;
    if (results.length < 1) return;
    // We have a landmark, use its location to do a nearby search.
    var request = {
        keyword: "coffee shop",
        location: results[0].geometry.location,
        radius: 500
    };
    service.nearbySearch(request, addMarkers);
}

function addMarkers(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      var place = results[i];
      createMarker(results[i]);
    }
  }
}

service.textSearch(request, extractTopLandmark);

并将其作为构建中的第一个任务运行。

这将首先删除所有已编译的文件,然后编译新的文件。

我觉得让我感到困惑的是,我认为如果我没有最后编译,filerev会标记带有新标记的最新文件,因此它会强制重新加载用户浏览器。但实际上添加到文件中的标记以某种方式从内容总和中计算(可能),因此即使您先删除文件并且不更改任何具有相同名称的文件也会生成。

我意识到这仍然不是如何删除所有其他文件的最终解决方案,而是索引中包含的文件,所以不接受我自己的答案。