2015-05-29 51 views
6

我試圖在複製時將一些佔位符替換爲不同的文件。我的gruntfile工作正常,但在進程選項中添加替換項,它只是不起作用。下面是我gruntfile的相關章節:流程選項混亂的grunt-contrib-copy語法

grunt.initConfig({ 

    copy: { 
     js: { 
      files: [{ 
       expand: true, 
       cwd: 'src/wp-content/themes/pilau-starter/', 
       src: ['**/*.js'], 
       dest: 'public/wp-content/themes/pilau-starter/' 
      }], 
      options: { 
       process: function (content) { 
        console.log(content); 
        content = content.replace(/pilauBreakpointLarge/g, breakpoints.large); 
        content = content.replace(/pilauBreakpointMedium/g, breakpoints.medium); 
        return content; 
       } 
      } 
     }, 
    } 

}); 

的路徑可以在代碼在GitHub上加以理解:https://github.com/pilau/starter(public目錄不承諾回購,因爲這是一個入門的主題)。這些路徑是我原始的Gruntfile中的變量,並且在所有其他任務中工作正常。

所有的變量都設置好。我已經包含了console.log(content)來檢查進程函數是否實際運行 - 它似乎不是,所以我想這是基本的語法。

有一個答案(https://stackoverflow.com/a/28600474/1087660)似乎解決了這個問題,但據我所知,這樣做的方式只是很糟糕的JS語法 - 不知道它是如何被標記爲正確的。

--verbose輸出運行復制任務:

Running "copy:js" (copy) task 
Verifying property copy.js exists in config...OK 
Files: src/wp-content/themes/pilau-starter/js/admin.js -> public/wp-content/themes/pilau-starter/js/admin.js 
Files: src/wp-content/themes/pilau-starter/js/flickity.js -> public/wp-content/themes/pilau-starter/js/flickity.js 
Files: src/wp-content/themes/pilau-starter/js/global.js -> public/wp-content/themes/pilau-starter/js/global.js 
Files: src/wp-content/themes/pilau-starter/js/modernizr.js -> public/wp-content/themes/pilau-starter/js/modernizr.js 
Files: src/wp-content/themes/pilau-starter/js/picturefill.js -> public/wp-content/themes/pilau-starter/js/picturefill.js 
Files: src/wp-content/themes/pilau-starter/js/respond.js -> public/wp-content/themes/pilau-starter/js/respond.js 
Options: processContent=false, processContentExclude=[], process=undefined 
Options: processContent=false, processContentExclude=[], process=undefined 
Copying src/wp-content/themes/pilau-starter/js/admin.js -> public/wp-content/themes/pilau-starter/js/admin.js 
Reading src/wp-content/themes/pilau-starter/js/admin.js...OK 
Writing public/wp-content/themes/pilau-starter/js/admin.js...OK 
+1

如果您運行帶有'--verbose'標誌的任務有什麼輸出方法reponsible?另外,'nonull'選項在調試時會很有幫助。 – steveax

+0

您使用的是哪個版本的'grunt-contrib-copy'?您可以嘗試使用'processContent'而不是'process',因爲它已在v0.4.1及更早版本中使用。你也可以嘗試控制檯登錄你的'breakpoints.large'和'breakpoints.medium',可能它們沒有在你的配置中正確設置... – nemesv

+0

運行時文件是否被複制到輸出? +1 - 關於'--verbose'的建議。 – James

回答

2

您的版本grunt-contrib-copy是0.4.0。正如由@nemesv正確地指出在此版本中使用的屬性名稱將是processContent而不是process

我克隆你的回購,並切換到json-breakpoints分支。並運行grunt copy:js,它取代了內容。因爲咕嚕使用JSON.stringify登錄值

original-content replaced-content

現在,當你運行grunt copy:js --verbose它仍然會顯示此

cli

processContent登錄不確定的。當你傳遞一個函數定義時,JSON.stringify返回undefined


如果你有興趣,這裏是爲記錄所有選項

Log.prototype.writeflags = function(obj, prefix) { 
     var wordlist; 
     if (Array.isArray(obj)) { 
      wordlist = this.wordlist(obj); 
     } else if (typeof obj === 'object' && obj) { 
      wordlist = this.wordlist(Object.keys(obj).map(function(key) { 
       var val = obj[key]; 
       return key + (val === true ? '' : '=' + JSON.stringify(val)); 
      })); 
     } 
     this._writeln((prefix || 'Flags') + ': ' + (wordlist || '(none)'.cyan)); 
     return this; 
    }; 
0

這似乎並非是與所有的process選項的問題,但更多的與srcThemeDir問題。我會記錄它以確保您確切知道它是什麼,因爲它似乎導致copy任務找不到任何文件(因此不會調用過程函數)。

+0

對不起,忘了切換。我用它設置的值替換了它。該變種適用於其他一切。在上面的編輯中也可以看到'--verbose'輸出 - 文件被發現OK。我所做的任何修改都被複制 - 只是替換不會發生。 –