Я немного развлекаюсь с созданием 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;