2015-07-13 52 views
1

我使用usemin生成我的JS和CSS文件 - 所有這些都以非常標準的方式。使用filerev在grunt usemin後刪除舊文件

我遇到的唯一問題是我想從我的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' 
      } 
     } 
    }); 

沒有什麼太特別的地方,我會說。一切都很正常,只有「問題」我遇到的是幾個建立後,我結束了這一點:

enter image description here

然後我得去手動刪除舊文件。

有沒有辦法在grunt運行過程中將它們刪除?運行後,我可以刪除「IPP-scripts.min *」,但我需要排除當前使用的一個...

感謝您的建議

+0

您應該建立一個與源代碼分開的新文件夾。然後,您可以刪除該文件夾。 – srlm

+0

@srlm你是什麼意思?每次建造到不同的文件夾?沒有多大意義。在一天結束時,你有** dist **文件夾,並且你想在那裏只有一個縮小文件版本 – Tom

回答

0

我想我並沒有考慮當直設置它。解決方案比我預想的要容易得多。

簡單:

clean: { 
      dist: [ 
       'dist/assets/css/ipp-styles.min*', 
       'dist/scripts/ipp-scripts.min*', 
       'dist/scripts/ipp-libs.min*', 
       'dist/scripts/ipp-templates.min*' 
      ] 
     }, 

並運行此爲在建的第一個任務。

這將刪除所有編譯的文件,然後編譯新的文件。

我覺得我很困惑的是,如果我沒有最後編譯,filerev會標記總是帶有新郵票的最新文件,因此它會強制在用戶瀏覽器上重新加載。但實際上,添加到文件中的郵票不知是多少(可能)來自內容總和,所以即使您先刪除文件並且不更改任何具有相同名稱的文件,也會生成。

我意識到這仍然不是如何刪除所有其他文件,但索引中包含的所有其他文件的最終解決方案,所以不會接受我自己的答案。