0

このスクリプトは gulp 4.0.0-alpha.2 を使用していますが、このスクリプトはもともと 3.x 用に作成されたものではないかと思います。

次のタスクが存在する、継承した gulp スクリプトがあります。

pump([
    gulp.src(['app\\images\\**\\*.*']),
    gulp.dest('.dev\\images')
] , done);

(渡された値は.src.destもともと他の場所から取得されたものですが、それらを変更するコードはないようです)

app\imagesフォルダーには、複数のiconsファイルを含むサブフォルダーが含まれています。gulp スクリプトの結果は次のとおりです。

  • では、これら4.0.0-alpha.2のファイルは次の場所に配置されます.dev\images\icons
  • では、これら4.0.2のファイルのペースが調整されます.dev\images\app\images\icons

以前はグロブからの相対パスのみだったのに対し、現在は 2 つのフル パスが連結されているようです (つまり、app\images\**\*.*見つかっapp\images\icons\icon1.pngたときに が返されicons\icon1.pngます)。

base呼び出し時にオプションに渡すと、srcこれが解決されるようです。

pump([
    gulp.src(['app\\images\\**\\*.*'], { base: 'app\\images\\' }),
    gulp.dest('.dev\\images\\')
] , done);

これは、異なるベースパスを持つパスの配列が渡されるケースを解決しません。例えば:

['app\\styles\brand\**\*.*', 'app\\brands\icons\icons.data.svg.css']

また、 のすべての呼び出しを更新する必要がない、より一般的なソリューションが利用可能であるように思われるsrcので....

宛先への書き込み時にグロブのみ、またはファイルの名前が使用される Gulp 4.0 を使用して同じ動作を取得するにはどうすればよいですか?


最小限の再現gulpfile.js:

'use strict';
const gulp = require('gulp');

exports.build = function()
{
    return gulp.src(['app\\images\\**\\*.*'])
        .pipe(gulp.dest('.dev\\images'));
}

そしてpackage.json

{
  "name": "test-web",
  "version": "1.0.0",
  "description": "Test Project",
  "main": "gulpfile.js",
  "scripts": {
    "build": "gulp build"
  },
  "author": "Me",
  "license": "ISC",
  "devDependencies": {
    "gulp": "^4.0.2"
  }
}

app\images\androidとの下にファイルがありますapp\images\apple(それぞれに 2 つ)

gulp@4.0.0-alpha.2(予想/望ましい) の結果:

  • .dev\images\android\1.png
  • .dev\images\android\2.png
  • .dev\images\apple\1.png
  • .dev\images\apple\2.png

結果gulp@v4.0.2(予期しない):

  • .dev\images\app\images\android\1.png
  • .dev\images\app\images\android\2.png
  • .dev\images\app\images\apple\1.png
  • .dev\images\app\images\apple\2.png
4

1 に答える 1