teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

forEachの挙動の部分を解説、回答を追記

2019/10/04 07:50

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -1,4 +1,50 @@
1
1
  原因がわかりましたので、回答させていただきます。
2
+
3
+ 原因は、元回答プラスαでした。
4
+ `js-browserify`タスクの中で、
5
+ return config....と実行しておりますが、
6
+ forEachは何も値を返さないので、
7
+ 次に実行している、`js-uglify`は何もない(undefined状態)ものに対して、
8
+ 何も実行できない、というのが原因です。
9
+ returnさせなきゃいけないのは、gulpオブジェクトですので、下記のように修正してはいかがでしょうか?
10
+
11
+ ```javascript
12
+ gulp.task('js-browserify', function() {
13
+ // returnさせるようのローカル変数を用意
14
+ let gulpData;
15
+
16
+ // まずはforEachを実行してしまう
17
+ config.js.concat.forEach(function(item, index, arr) {
18
+ // あらかじめ、返す用の変数に格納しておく
19
+ const gulpInnerData = browserify (
20
+ {
21
+ entries: item.source,
22
+ extensions: ['.js']
23
+ }
24
+ )
25
+ .bundle()
26
+ .on('error', function(e){
27
+ console.log(e);
28
+ })
29
+ .pipe(source(item.publish))
30
+ .pipe(gulp.dest('dist/js/'));
31
+
32
+ // 走査の最後なら、上スコープの変数に格納
33
+ if (index + 1 == arr.length) {
34
+ gulpData = gulpInnerData;
35
+ }
36
+ });
37
+ // 最終的なGulpオブジェクトを返す
38
+ return gulpData;
39
+ });
40
+
41
+ ```
42
+
43
+ 上記プラス、元回答のrunSequenceの同期実行を行えば、うまくいくはずです。
44
+
45
+
46
+ -------- 以下元回答 --------
47
+
2
48
  一番目の処理である、`js-browserify`タスクが**完了される前**に、
3
49
  次の`js-uglify`タスクが実行されているからです。
4
50