私は次の構造を持っています:
src/
modules/
module1/
js/
main.js
scss/
main.scss
index.html
module2/
js/
main.js
scss/
main.scss
index.html
単調なタスクを実行して、これらを次の構造にコピーしたいと思います。
dev/
js/
module1.js
module2.js
css/
module1.css
module2.css
module1.html
module2.html
既存のうなり声プラグインでこれを行う方法はありますか?そうでない場合、どうすればこれを達成できますか?
これは grunt-contrib-copy プラグインを使用して実行できます。
主な注意点は、名前変更機能(各ファイルの宛先とソースを取り込む)を使用して、プログラムで宛先を変更できることです。
これは(やや脆い)サンプルGruntfile.js
目的の構造にコピーする必要があります。
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
copy: {
main: {
files: [
{
expand: true,
cwd: 'src/modules/',
src: ['**/*.js'],
dest: 'dev/js/',
rename: function(dest, src) {
// use the source directory to create the file
// example with your directory structure
// dest = 'dev/js/'
// src = 'module1/js/main.js'
return dest + src.substring(0, src.indexOf('/')) + '.js';
}
},
{
expand: true,
cwd: 'src/modules/',
src: ['**/*.scss'],
dest: 'dev/css/',
rename: function(dest, src) {
return dest + src.substring(0, src.indexOf('/')) + '.css';
}
},
{
expand: true,
cwd: 'src/modules/',
src: ['**/*.html'],
dest: 'dev/',
rename: function(dest, src) {
return dest + src.substring(0, src.indexOf('/')) + '.html';
}
}
]
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
// Default task(s).
grunt.registerTask('default', ['copy']);
};
このためだけにgrunt-contrib-copy
を使用する必要はありません。ファイル拡張子を変更するか、出力ファイル名を返す関数を定義するオプションがあるgrunt.file.expandMapping
を利用できます。
.jadeテンプレートを.htmlファイルにコンパイルするためのfiles
タスク内のjade
オブジェクトの例を次に示します。
files: [{
expand: true,
src: "**/*.jade",
dest: "<%= distDir %>",
cwd: "<%= assetsDir %>/jade",
rename: function(dest, matchedSrcPath, options) {
// return the destination path and filename:
return (dest + matchedSrcPath).replace('.jade', '.html');
}
}]
この場合、rename
オプションの代わりにext: '.html'
オプションを使用する方が簡単でしたが、ここでrename
を使用しているので、どのように機能するかを確認できます。
grunt.file docs のext
およびrename
(およびその他の)オプションに関する詳細情報。いくつかの例 here および here 。
単純にオプションを使用できます:expand:true、flatten:true
カスタムの名前変更コールバックは不要です。
あなたの質問に対する正確な答えではありませんしかし、私はここで探していましたうなり声のある相対的な宛先フォルダそう...ここに私がそれを解決した方法があります
_...
base: {
files:
[
{
expand: true,
cwd: 'app/design/frontend/',
src: ['**/Magento_Sales/email-src/*.html'],
dest: '../../Magento_Sales/email/',
rename: function(dest, src, expand) {
src = path.parse(src)
return path.join(expand.cwd, src.dir, dest, src.base);
}
},
],
}
...
_
この小さなpath.join(expand.cwd, src.dir, dest, src.base);
は、必要なパスを作成するだけです。
_expand.cwd = app/design/frontend/
_
_src.dir = <DYNAMIC_FOLDERS>/Magento_Sales/email-src/
_
_dest = ../../Magento_Sales/email/
_
_src.base = <FILE>.html
_
そして、すべて一緒に= _app/design/frontend/<COMPANY>/<MAIN-THEME>/Magento_Sales/email/<FILE>.html
_
そして私の状況では、相対する宛先フォルダにHTMLメールをコンパイルします