v3shin
@v3shin
Веб-шаман

Как настроить webpack через gulp?

Всем привет. Почему-то не собираются js файлы с помощью связки gulp+webpack.
Есть такая gulptask'а:
webpack.js
var $ = require('gulp-load-plugins')()
var gulp = require('gulp')
var path = require('path')
var webpackStream = require('webpack-stream')
var webpack = webpackStream.webpack

var config = {
  entry: {
    'admin/product': './frontend/js/admin/product',
  },
  output: {
    filename: '[name].js',
  },
  externals: {
    jquery: 'jQuery',
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        include: path.join(__dirname, 'frontend/js'),
        loader: 'babel?presets[]=es2015',
      },
    ],
  },
  plugins: [
    new webpack.NoEmitOnErrorsPlugin(),
    new webpack.optimize.CommonsChunkPlugin({
      name: 'admin/product',
      chunks: ['admin/product'],
    }),
  ],
}

module.exports = function (options) {
  return function () {
    return gulp
      .src(options.src)
      .pipe(
        $.plumber({
          errorHandler: $.notify.onError(function (err) {
            return {
              title: 'Webpack',
              message: err.message,
            }
          }),
        })
      )
      .pipe(webpackStream(config))
      .pipe($.if(true, $.uglify()))
      .pipe(gulp.dest(options.dest))
  }
}

Запускается это через командную строку от имена администратора:
gulp webpack

Gulpfile имеет такой вид:
gulpfile.js
var gulp = require('gulp');
function lazyRequireTask(taskName, path, options) {
	options = options || {};
	options.taskName = taskName;
	gulp.task(taskName, function(callback) {
		var task = require(path).call(this, options);
		return task(callback);
	});
}
lazyRequireTask('webpack', './frontend/gulp-task/webpack', {
	src: ['./frontend/js/admin/*.js'],
	dest: './web/js/'
});

Код /frontend/js/admin/product.js:
/frontend/js/admin/product.js
require('./components/product');

На выходе в /web/js/admin/ не получается файл. Файл вообще не создается. Ожидаемый файл должен иметь вид:
/web/js/admin/product.js
webpackJsonp([1],{10:function(t,e){function v(){this.$grid=$(".products__grid"),this.init()}v.prototype.eventTabActive=function(){var t=app.getUrlParam("tab");if(!t)return!1;$("#tab-link-"+t).click()} ... и еще куча минифицированного кода.

Если из task'и убрать строку .pipe(webpackStream(config)), скрипт собирается в /web/js/ - не куда надо - и имеет тот же вид, что и исходники.
В чем может быть проблема или в какую сторону читать?
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
v3shin
@v3shin Автор вопроса
Веб-шаман
В общем, проблема была где-то с webpack-stream, ее я решить не смог. Зато файлы нормально собрались через webpack без gulp'а с тем же конфигом.
Правильный ответ такой: так как у нас на проекте никто не знает как собирать статику, я могу лепить что хочу. Добавил задачу в package по сборке через webpack и работаю через нее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Alexander-Korotckevich
Решил подобную проблему установкой более старой версии webpack-stream. В моем случае поменял 7 версию на 4+.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы