我正在裝飾我自己的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
動作(如上例所示)。我如何獲得變量的工作方式,或者處理這個問題的最好方法是什麼?