为什么 WordPress 后端样式在我的本地开发环境中不起作用?

Why are WordPress backend styles not working on my local dev environment?

我在一家开发自定义 WordPress 主题的公司担任前端 Web 开发实习生。我的本地开发环境包括 Laravel Valet v2.16.0 和 Webpack v5.52.1 以及 Laravel Mix v6.0.31 作为编译器。目前我们正在开发节点 v12 和 php v7.4。我正在使用 macOS Big Sur v11.6。

自从我开始在这里工作以来,后端样式没有显示在本地开发环境中。对于所有其他员工 (Windows) 和测试版网站,一切都在后端正确显示。控制台或捆绑期间没有错误消息。

一种方法是问题与 CURL 证书有关。我将证书路径添加到我的本地 PHP 配置文件,但这没有用。

这里有一个示例,说明它在本地和在测试版环境中的样子。

本地后端:

测试版后端:

这是我的 webpack.mix.js:

const mix = require('laravel-mix');

const {
    CleanWebpackPlugin
} = require('clean-webpack-plugin');

require('laravel-mix-versionhash');

// env support
const dotenv = require('dotenv').config({ path: process.env.PWD + '/.env.bundler' })

const path = require('path');
const homedir = require('os').homedir();

const protocol = !!dotenv.parsed.PROTOCOL ? dotenv.parsed.PROTOCOL : 'http://';
const domain = !!dotenv.parsed.DOMAIN ? dotenv.parsed.DOMAIN : 'localhost';

let browserSyncArguments = {
    proxy: protocol + domain,
    host: domain,
    ui: false,
    open: false,
    reloadDelay: 500,
    files: [
        'assets/src/**/*',
        'views/**/*',
        'lib/**/*',
    ],
};

if (protocol === 'https://') {
    browserSyncArguments = {
        ...browserSyncArguments,
        ...{
            https: {
                key: homedir + '/.localhost-ssl/' + domain + '.key',
                cert: homedir + '/.localhost-ssl/' + domain + '.crt',
            }
        }
    }
}

mix.setPublicPath('./assets/dist')
    .browserSync(browserSyncArguments);

// WebPack config overwrite
mix.webpackConfig({
    plugins: [
        // Clean unused/old files
        new CleanWebpackPlugin(),
    ],
    module: {
        rules: [{
            test: /\.(sa|sc|c)ss$/,
            use: [
                // Reads Sass vars from files or inlined in the options property
                {
                    loader: "@epegzz/sass-vars-loader",
                    options: {
                        syntax: 'scss',
                        files: [
                            // Option 2) Load vars from JSON file
                            path.resolve(__dirname, 'lib/Config/global.json')
                        ]
                    }
                }
            ]
        }
        ]
    }
});


// copy images folder to dist, use copyWatched for support in watch mode
mix.copy('assets/src/images/**', 'assets/dist/images')
    .copy('assets/src/fonts/**', 'assets/dist/fonts');

// JS build process
mix.js('assets/src/scripts/main.js', 'scripts/scripts.js').js('assets/src/scripts/blocks.js', 'scripts/blocks.js').react().extract();


// CSS build process (includes fonts)
mix.sass('assets/src/styles/main.scss', 'styles/styles.css');

// add versionHash to files only on prod - breaks watcher (ex. 'styles_8d0b9038.css')
if (mix.inProduction()) {
    mix.versionHash({
        length: 8,
        delimiter: '_'
    });
} else {
    // add sourceMaps
    mix.sourceMaps(false, 'source-map');
}

mix.options({
    processCssUrls: false,
    postCss: [require('postcss-inline-svg')]
});

如果您还需要什么,请告诉我。

问题是由 postcss-inline-svg 包引起的。 我的同事通过执行以下步骤修复了它。

  • 安装postcss-svgo包
  • 将 postcss-svgo 添加到 webpack.mix.js

    mix.options({
        processCssUrls: false,
        postCss: [
            require('postcss-inline-svg'),
            require('postcss-svgo')
        ]
    });

  • 编辑lib/core/Assets.php

    wp_enqueue_style('editor-styles-bundled', get_template_directory_uri() . '/assets/dist/styles/editor-styles.css/styles.css');


    add_editor_style(get_template_directory_uri() . '/assets/dist/styles/editor-styles.css/styles.css');

  • 安装gulp和gulp-postcss包并创建gulpfile.js

    const postcss = require("gulp-postcss");
    const postcssEditorStyles = require("postcss-editor-styles");
    const gulp = require('gulp');
    gulp.task("css", () =>
        gulp
            .src("./assets/dist/styles/styles.css")
            .pipe(postcss([postcssEditorStyles(/* pluginOptions */)]))
            .pipe(gulp.dest("./assets/dist/styles/editor-styles.css"))
    );

现在您可以使用“yarn production && gulp css”来捆绑您的代码。