Yii2 Grunt:复制目录名为动态的目录?

Yii2 Grunt:复制目录名为动态的目录?,yii2,gruntjs,yii2-advanced-app,grunt-contrib-copy,Yii2,Gruntjs,Yii2 Advanced App,Grunt Contrib Copy,我正在用Grunt来修饰我自己版本的Yii2 advanced,以处理所有事情。从将Yi2重置回工厂(删除-local.php、清理日志、资产等),使用Gulp进行资产处理,结合并缩小CSS和JS,使用更少的SCSS和TS支持。我正试图用Grunt让一切变得更容易、更好,因为我需要所有的东西 我有我工作的模板(扩展控制器、模型、配置、主题、布局、视图)都是自定义的。我还想包括基本、前端、通用等的默认(未触及的)yii2模板。如果需要,它们就在那里,我不必从干净的yii2回购中复制粘贴 我在yii

我正在用Grunt来修饰我自己版本的Yii2 advanced,以处理所有事情。从将Yi2重置回工厂(删除-local.php、清理日志、资产等),使用Gulp进行资产处理,结合并缩小CSS和JS,使用更少的SCSS和TS支持。我正试图用Grunt让一切变得更容易、更好,因为我需要所有的东西

我有我工作的模板(扩展控制器、模型、配置、主题、布局、视图)都是自定义的。我还想包括基本、前端、通用等的默认(未触及的)yii2模板。如果需要,它们就在那里,我不必从干净的yii2回购中复制粘贴

我在yii2高级应用程序的根目录中构建了一个
\u templates
目录。里面有一个
yii2
目录。在默认模板的
default
目录中,该目录具有
后端
前端
等未触及的模板。然后在yii2目录下,
custom
将放置我的自定义模板。这是一个总体结构:

├── _templates
│   └── yii2
│       └── default
│           └── backend
│           └── frontend
│       └── custom
│           └── backend
│           └── frontend
现在,如果我想制作另一个部分(应用程序),我只想运行:

吞下新的应用程序--template=yii2/custom/frontend--name=mobile
并让它将该目录复制到我的应用程序的根目录

它在名称空间的文件中还有一个占位符。因此,如果我将其命名为“mobile”,则模板中的文件需要名称空间为“mobile”。因此,我将
{{%REPLACE-APP-NAME%}}
添加到文件中。这是一个单独的问题,但下一个我要处理的问题是,万一有人回答也能帮上忙,我将不胜感激


我现在的位置:我的GrunFile有一个复制操作列表,用于后端、前端和主站点。这些是必需的,在我的
构建
命令中使用,以便从供应商处复制所需的文件。我不想打破这个

我假设我需要在
copy
命令中添加另一个部分来处理模板的复制?但是,目录名未知?如何将目录名传递给此任务

Grunfile:

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!');
});
module.exports=函数(grunt){
grunt.initConfig({
副本:{
后端:{
档案:[
{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}
]
},
前端:{
档案:[
{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}
]
},

模板:{/您可以在注册的任务中运行grunt任务,方法是:

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