2017-03-27 38 views
0

我正在裝飾我自己的Yii2先進的Grunt版本來處理一切。從重新設置Yii2到工廠(清除-local.php,清理日誌,資產等),使用Gulp進行資產處理,將CSS和JS進行組合和縮小,並支持LESS,SCSS和TS。我正在努力使Grunt的一切變得更加輕鬆和美好,滿足我需要的所有事情。Grunt:複製dir名稱是動態的目錄嗎?

我有我工作的模板(擴展控制器,模型,配置,主題,佈局,視圖)所有自定義。我也希望爲基本,前端,公共等包含默認(未觸及)yii2模板。只要需要,它們就在那裏,我不必從乾淨的yii2回購站複製粘貼。

我在我的yii2高級應用程序的根目錄中建立了一個_templates目錄。在裏面我有一個yii2目錄。默認模板的default目錄裏面有backend,frontend等,它們是未觸摸過的模板。然後我有我的自定義模板將在yii2目錄下,custom。因此,這裏是一個一般結構:

├── _templates 
│ └── yii2 
│  └── default 
│   └── backend 
│   └── frontend 
│  └── custom 
│   └── backend 
│   └── frontend 

現在,如果我不想再拍部(APP),我想就這樣運行:

gulp new-app --template=yii2/custom/frontend --name=mobile並將它該目錄複製到我的應用程序的根目錄。

它在命名空間的文件中也有一個佔位符。因此,如果我將其命名爲「mobile」,則模板內的文件需要具有「移動」的名稱空間。所以我添加了{{%REPLACE-APP-NAME%}}到這些文件。這是一個單獨的問題,但接下來在我的名單上處理,以防萬一有人回答也可以幫助,這將不勝感激。


當我在現在:我Gruntfile具有複製動作,後端,前端和mainsite的列表。在我的build命令期間,這些是必需的,用於從供應商複製需要的文件。我不想打破這個。

我想我需要添加另一節到我的copy命令來處理複製模板?但是,目錄名稱未知?我如何將目錄名稱傳遞給此任務?

Gruntfile:

module.exports = function (grunt) { 
grunt.initConfig({ 
    copy: { 
     backend: { 
      files: [ 
       {expand: true, flatten: true, src: ['vendor/bower/bootstrap/fonts/*'], dest: 'backend/web/assets/fonts/', filter: 'isFile'}, 
       {cwd: 'vendor/almasaeed2010/adminlte/dist', src: '**/*', dest: 'backend/web/assets/themes/adminlte', expand: true} 
      ] 
     }, 

     frontend: { 
      files: [ 
       {expand: true, flatten: true, src: ['vendor/bower/bootstrap/fonts/*'], dest: 'frontend/web/assets/fonts/', filter: 'isFile'}, 
       {cwd: 'vendor/almasaeed2010/adminlte/dist', src: '**/*', dest: 'frontend/web/assets/themes/adminlte', expand: true} 
      ] 
     }, 

     template: { // <-- DOES NOT WORK, JUST EXAMPLE 
      files: [{ 
       src: '_templates/' + templatePath + '/**/*', // <-- NOTICE templatePath variable! 
       dest: saveName, <-- NOTICE saveName variable 
       expand: true 
      }] 
     }, 
    }, 
}); 

grunt.loadNpmTasks('grunt-contrib-copy'); 

grunt.registerTask('build', ['less', 'sass_import', 'sass', 'typescript', 'concat', 'cssmin', 'uglify', 'copy']); 
grunt.registerTask('build-backend', ['less:backend', 'sass_import:backend', 'sass:backend', 'typescript:backend', 'concat:backend', 'cssmin:backend', 'uglify:backend', 'copy:backend']); 
grunt.registerTask('build-frontend', ['less:frontend', 'sass_import:frontend', 'sass:frontend', 'typescript:frontend', 'concat:frontend', 'cssmin:frontend', 'uglify:frontend', 'copy:frontend']); 

grunt.registerTask('new-app', function() { 
    var templateName = grunt.option('template'); 
    var saveName = grunt.option('name'); 

    if (! grunt.file.isDir('_templates/' + templateName)) { 
     grunt.warn('Template Not Found!\n'); 
    } 
    grunt.log.writeln('Chosen Template: ' + templateName); 
    // do work here :) 
    grunt.log.writeln('Done!'); 
}); 

然後命令:grunt new-app --template=yii2/default/frontend --name=mobile

template選項簡單說就是路徑模板從複製。 name選項將作爲將該目錄複製到的名稱。即:一旦複製完成,它將在應用程序根目錄中調用的最終名稱。

如何從我的new-app任務中調用copy命令?我在copy任務中添加了template動作(如上例所示)。我如何獲得變量的工作方式,或者處理這個問題的最好方法是什麼?

回答

0

您可以grunt.task.run運行註冊任務裏面咕嚕任務:

grunt.log.writeln('Chosen Template: ' + templateName); 
grunt.task.run(['copy:' + templateName]); 
相關問題