Загрузка изображений через веб-пакет не правильно связывает их - PullRequest
0 голосов
/ 08 декабря 2018

Я немного развлекаюсь с созданием WordPress темы с React, я создал свои конфиги и прочее, только одна вещь не работает, сколько бы я ни старался - изображения.

Моя проблема в том, что, изображения не связаны правильно.Теперь я использую url-загрузчик, который анализирует все изображения на base64, но это не оптимально.Я ищу конфигурацию, которая позволяет веб-пакетам правильно связывать пакеты изображений с /public.

Моя установка выглядит так:

  • theme_folder (codevly)
    • assets (папка разработчика)
      • images
      • js (все файлы javascript)
      • scss (все стили)
    • public(сборка)
    • такие вещи, как index.php, header.php, все, что нужно для загрузки темы, также веб-пакет, конфиги gulp

И мои конфиги

gulpfile:

var gulp          = require('gulp');
var sass          = require('gulp-sass');
var watch         = require('gulp-watch');
var browserSync   = require('browser-sync');
var csso          = require('gulp-csso');
var postcss       = require('gulp-postcss');
var autoprefixer  = require('autoprefixer');
var webpack       = require('webpack');
var webpackStream = require('webpack-stream-fixed');

function swallowError (error) {
    //Prints details of the error in the console
    console.log(error.toString());
    this.emit('end')
}

gulp.task('sass', function() {
    gulp.src('./assets/scss/app/app.scss')
        .pipe(sass())
        .on('error', swallowError)
        .pipe(postcss([ autoprefixer() ]))
        .pipe(gulp.dest('./public/css'))
        //For auto injecting the CSS into the browser. 
        .pipe(browserSync.stream({match: '**/*.css'}));
});

gulp.task('sass-vendor', function() {
    gulp.src('./assets/scss/vendor/vendor.scss')
        .pipe(sass())
        .pipe(gulp.dest('./public/css'))
        .pipe(browserSync.stream({match: '**/*.css'}));
});

gulp.task('webpack', function() {
return gulp.src('./assets/js/app.js')
    .pipe(webpackStream( require('./webpack.config.js'), webpack ))
    .on('error', swallowError)
    .pipe(gulp.dest('./public/js'));
});

gulp.task('production', function() {
    //Setting ENV to production so Webpack will minify JS files. 
    process.env.NODE_ENV = 'production';
    gulp.src('./assets/js/app.js')
        .pipe(webpackStream( require('./webpack.config.js'), webpack ))
        .pipe(gulp.dest('./public/js'));

    gulp.src('./public/css/app.css')
        .pipe(csso())
        .pipe(gulp.dest('./public/css'));

    gulp.src('./public/css/vendor.css')
        .pipe(csso())
        .pipe(gulp.dest('./public/css'));
});


gulp.task('watch', function () {
    //Webpack will watch the asser files. All we need is to watch the compiled files.
    gulp.watch('./public/js/*.js').on('change', browserSync.reload);
    gulp.watch(['./assets/scss/app/*.scss', './assets/src/scss/app/components/*.scss'], ['sass']);
    gulp.watch(['./assets/scss/vendor/vendor.scss'], ['sass-vendor']);
});


gulp.task('sync', function() {
    var options = {
        proxy: 'localhost/codevly/wordpress',
        port: 3000,
        files: [
            '**/*.php'
        ],
        ghostMode: {
            clicks: false,
            location: false,
            forms: false,
            scroll: false
        },
        injectChanges: true,
        logFileChanges: true,
        logLevel: 'debug',
        logPrefix: 'gulp-patterns',
        notify: true,
        reloadDelay: 0,
    };
    browserSync(options);
});

gulp.task('default', ['webpack', 'sass', 'sass-vendor', 'watch', 'sync']);

webpack.config.js

const path            = require('path');
const webpack         = require('webpack');
const UglifyJSPlugin  = require('uglifyjs-webpack-plugin');

const config = {
    mode: process.env.NODE_ENV ? process.env.NODE_ENV : 'development',
    watch: true,
    entry: {
        app: './assets/js/app.js',
        vendor: ['babel-polyfill', 'react', 'react-dom']
    },
    output: {
                filename: '[name].js',
        path: path.resolve(__dirname, 'public/js/'),
        publicPath: './public'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /(node_modules)/,
                loader: 'babel-loader',
            },
            {
                test: /\.jsx$/,
                exclude: /(node_modules)/,
                loader: 'babel-loader',
            },
            {
                test: /\.(jpe?g|png|gif|svg)$/i, 
                loader: "url-loader?name=app/images/[name].[ext]"
            },
        ]
    },
    optimization: {
    splitChunks: {
      chunks: 'async',
      minSize: 30000,
      maxSize: 0,
      minChunks: 1,
      maxAsyncRequests: 5,
      maxInitialRequests: 3,
      automaticNameDelimiter: '~',
      name: true,
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          priority: -10
        },
        default: {
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true
        }
      }
    }
  }
};

//If true JS files will be minified
if (process.env.NODE_ENV === 'production') {
    config.plugins.push(
        new UglifyJSPlugin({
            compress: {
                warnings: false
            }
        })
    );
    config.watch = false;
}

module.exports = config;
...