私はGruntを使って自分のYii2バージョンをデックして、すべてを処理します。資産の処理にGulpを使用し、CSSとJSの組み合わせと縮小をLESS、SCSS、TSサポートと組み合わせて、Yii2を工場出荷時の設定に戻す(-local.phpを削除する、ログを消去する、資産など)。私は必要なすべてのもののために、グランツですべてをより簡単にそしてより良くするように努めています。Grunt:ディレクトリ名が動的なディレクトリをコピーしますか?
私は(拡張コントローラ、モデル、設定、テーマ、レイアウト、ビュー)すべてのカスタムから作業するテンプレートを持っています。私はまた、基本的な、フロントエンド、共通などのためのデフォルトの(手つかずの)yii2テンプレートを含めることを望んでいる。ちょうどそうなら、彼らはそこにあり、私はクリーンなyii2リポジトリからコピーアンドペーストする必要はありません。
yii2アドバンスドアプリのルートに_templates
ディレクトリを作成しました。その中にはyii2
というディレクトリがあります。その内部にdefault
ディレクトリには、デフォルトのテンプレートのbackend
、frontend
などがありますが、それは手つかずのテンプレートです。次に私は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
タスクに追加しました(上記の例のように)。どのように変数を動作させることができますか、これを処理する最良の方法は何ですか?