2017-03-27 8 views
0

私はGruntを使って自分のYii2バージョンをデックして、すべてを処理します。資産の処理にGulpを使用し、CSSとJSの組み合わせと縮小をLESS、SCSS、TSサポートと組み合わせて、Yii2を工場出荷時の設定に戻す(-local.phpを削除する、ログを消去する、資産など)。私は必要なすべてのもののために、グランツですべてをより簡単にそしてより良くするように努めています。Grunt:ディレクトリ名が動的なディレクトリをコピーしますか?

私は(拡張コントローラ、モデル、設定、テーマ、レイアウト、ビュー)すべてのカスタムから作業するテンプレートを持っています。私はまた、基本的な、フロントエンド、共通などのためのデフォルトの(手つかずの)yii2テンプレートを含めることを望んでいる。ちょうどそうなら、彼らはそこにあり、私はクリーンなyii2リポジトリからコピーアンドペーストする必要はありません。

yii2アドバンスドアプリのルートに_templatesディレクトリを作成しました。その中にはyii2というディレクトリがあります。その内部にdefaultディレクトリには、デフォルトのテンプレートのbackendfrontendなどがありますが、それは手つかずのテンプレートです。次に私はyii2 dirの下にあります。custom私のカスタムテンプレートはどこにありますか?そこでここでは一般的な構造である:今

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

、私は別のセクション(アプリ)を作りたい場合は、私はちょうど実行したい:

gulp new-app --template=yii2/custom/frontend --name=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タスクに追加しました(上記の例のように)。どのように変数を動作させることができますか、これを処理する最良の方法は何ですか?

答えて

0

あなたはgrunt.task.runに登録されたタスク内の単調なタスクを実行できます。

grunt.log.writeln('Chosen Template: ' + templateName); 
grunt.task.run(['copy:' + templateName]); 
関連する問題