我正在使用Grunt装配我自己的Yii2高级版来处理所有事情。从重置Yii2到工厂(删除-local.php,清理日志,资产等),使用Gulp进行资产处理,组合和缩小CSS和JS,以及LESS,SCSS,TS支持。我正努力让Grunt更轻松,更好地完成所有我需要的事情。
我使用的模板(扩展控制器,模型,配置,主题,布局,视图)都是自定义的。我也希望包括基本,前端,普通等的默认(未触摸)yii2模板。只是如果需要,它们就在那里,我不需要从干净的yii2 repo中复制粘贴。
我在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”,则模板内的文件需要具有“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
选项将是将目录复制为的名称。 ie:一旦复制过,它将在app root中调用。
如何在copy
任务中调用new-app
命令?我在template
任务中添加了copy
操作(如上例所示)。如何使变量起作用,或者处理此变量的最佳方法是什么?
答案 0 :(得分:0)
您可以使用grunt.task.run
grunt.log.writeln('Chosen Template: ' + templateName);
grunt.task.run(['copy:' + templateName]);