質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.85%

  • gulp

    247questions

    gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

  • webpack

    179questions

gulp + webpackが動かない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 62

nnahito

score 1637

 はじめに

gulp、webpackともに初心者です。
今はじめて触っています。
なお、PHPのフレームワークはcakephp3(最新)です。

 やりたいこと

gulp起動中にJSファイルを保存したら、minifyしたデータが吐き出されるようにしたい。

 やったこと

nodebrewでnodejsを入れ、
npmでyarnを入れた。

# プロジェクトフォルダに移動
cd project_folder

# gulp導入
yarn add --dev gulp

# gulpのインストール
yarn install

さらに、以下gulpfileを見よう見まねで作成。
IntelliJ使ってるんですが、すっごい赤波線が引かれますね……この設定はあるのだろうか…?

gulpfile.js

const path = require('path');                                   // 絶対パスを指定できるようにする
const gulp = require('gulp');                                   // gulp本体
const iconfont = require('gulp-iconfont');                      // gulpでsvgからアイコンフォントを作成する
const consolidate = require('gulp-consolidate');                // svgから作ったアイコンフォントを出力するテンプレートエンジンで使う
const svgmin = require('gulp-svgmin');                          // svgを圧縮する
const sass = require('gulp-sass');                              // SASSのコンパイル
const autoprefixer = require('gulp-autoprefixer');              // CSSのベンダープレフィックス付与を自動化
const runSequence = require('run-sequence');                    // 登録したタスクを並列で実行
const plumber = require('gulp-plumber');                        // ファイル監視中におかしいとこがあっても監視をストップしない
const rename = require('gulp-rename');                          // minify したファイル名にminをつけて出力する
const sourcemaps = require('gulp-sourcemaps');                  // スタイルがどこのファイルから当てられてるのか分かるようになる
const cmq = require('gulp-combine-media-queries');              // @mediaの記述があちこちに散らばってる場合、後ろの方にまとめてくれる

// 書き出し先設定
const config = {
    dest: 'webroot/css'
}

// SASSのCSSコンパイル
gulp.task('sass',function() {
    // webroot/css/scss/配下の物がコンパイル対象
    gulp.src('webroot/css/scss/**/*.scss',{base:'.'})
        .pipe(plumber())
        .pipe(sass())
        .pipe(sass({outputStyle: 'expanded'}))
        .pipe(autoprefixer())
        .pipe(rename(function(path){
            path.dirname = '.';
        }))
        .pipe(gulp.dest(config.dest))
});

// webpackの設定
gulp.task('webpack', function(){
    webpackConfig = reload('./webpack.config.js');

    webpackStream(webpackConfig, webpack)
        .pipe(gulp.dest(webpackConfig.output.path))
});

// 監視し続ける
gulp.task('watch',function () {
    gulp.watch(['webroot/css/scss/**/*.scss'],['sass']);
    gulp.watch(['webroot/iconfonts/base/*.svg'],['iconfont']);
    gulp.watch('./webroot/js/vendor/*.js', function (){
        gulp.start(['webpack'])
    });
});


// 監視開始
gulp.task('default',['watch']);

次に、同階層にwebpack.config.jsファイルを作成

webpack.config.js

const path = require('path');
const webpack = require('webpack');
const glob = require('glob');
const entries = [];
const bundleFileName = 'minify.js';

// vender配下の.jsファイルがミニファイ対象
glob.sync('./webroot/js/vendor/*.js').map(function(file){
    entries.push(file);
});

module.exports = {
    entry: entries,
    output: {
        path: path.join(__dirname,'webroot/js'),
        filename: bundleFileName
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['es2015']
                    }
                }
            }
        ]
    },
    plugins: [
        new webpack.optimize.UglifyJsPlugin(),
        //new webpack.ProvidePlugin({'Promise': 'es6-promise'})
    ]
};

再度install

# gulpのインストール
yarn install

 エラー

ReferenceError: reload is not definedと出るので、おそらくgulpfile.jsの、
webpackConfig = reload('./webpack.config.js');が問題かと思われますが……
直し方がわからず……

申し訳ありませんが、お分かりになる方がいらっしゃいましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

普通 reload() じゃなくて require() じゃないのかな?
そうでなければどこかで reload() 関数を定義する必要があるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • gulp

    247questions

    gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

  • webpack

    179questions