构建流程

在开发 WordPress 主题时,考虑是否需要构建流程来帮助你管理主题资源并优化性能会很有用。

在本课中,你将学习更多关于构建流程的知识、为何要使用它们,以及如何使用 @wordpress/scripts 包来设置一个基本的构建流程。

什么是构建流程?

构建流程是一种将源代码文件转换为计算机可读取的最终构建/生产版本的方法。

特别是,主题通常会将源代码压缩或转换为 CSS 或 JavaScript,以便浏览器能够读取。

为什么要使用构建流程?

根据你在主题中使用的技术,你可能需要一个构建流程来帮助你管理主题资源并优化性能。

例如,如果你选择使用 Sass 来编写样式,你将需要一个构建流程来将你的 Sass 文件编译成浏览器可读取的 CSS 文件。

如果你选择使用更现代的语法编写 JavaScript,你将需要一个构建流程来将你的 JavaScript 文件转译成所有浏览器都能执行的格式。

即使你不使用这些选项,构建流程对于优化主题资源仍然很有用,例如压缩 CSS 和 JavaScript 文件以及优化图片。

在创建 WordPress 主题时,你可能会发现自己需要一个构建流程来处理更复杂的项目。有很多系统可供选择,你可以使用任何你喜欢的。

WordPress 也提供了 @wordpress/scripts 包,你可以放心它会持续更新,并且应该能满足你大部分的需求。

前置要求

大多数 WordPress 主题开发不需要任何额外的软件。你只需要一个代码编辑器、一个本地开发环境和一个 WordPress 安装。

但要使用构建流程,还有一些其他要求:

  • 你需要在本地机器上安装 Node.js 和 npm,这也是构建 WordPress 区块的要求。
  • 建议对 webpack 有基本的了解。
  • 对 @wordpress/scripts 包有一定熟悉度。

这些工具比通常构建主题所需的工具更高级,但如果你想使用标准的 WordPress 构建流程,它们是必需的。

如果你已经完成了初级开发者学习路径中的区块开发入门模块,你应该已经具备了所有需要的知识。

设置文件和文件夹

@wordpress/scripts 包最初是为区块开发创建的。随着时间的推移,它已经发展到也能与主题一起使用。

默认情况下,它期望开发文件位于 /src 文件夹中,并将构建文件输出到 /build 文件夹。

然而,大多数主题作者会使用自定义系统来处理资源。

假设你的主题有以下结构:

your-theme/
├── resources/
│   ├── js/
│   └── scss/
├── public/
│   ├── js/
│   └── css/
├── style.css
└── functions.php

你的开发 JavaScript 和 Sass 文件分别位于 resources/jsresources/scss 文件夹中。当构建流程运行时,你希望它们被输出到 public/jspublic/css 文件夹。

设置 package.json 文件

第一步,如果你还没有做的话,是初始化 npm 项目。这将在你的主题根目录中创建一个 package.json 文件。

为此,打开你的终端,导航到主题根目录,并运行以下命令:

npm init

系统会提示你输入一些关于项目的信息。你可以按回车接受默认值,或根据自己的喜好更改这些值。

完成设置后,你的主题根目录中会有一个 package.json 文件。

{
  "name": "your-theme",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

接下来,你需要将 @wordpress/scripts 包作为开发依赖项安装。

为此,在终端中,在你的主题根目录下运行以下命令:

npm install @wordpress/scripts --save-dev

完成后,你会看到 package.json 文件已更新,包含了新的依赖项。

{
  "name": "your-theme",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@wordpress/scripts": "^27.9.0"
  }
}

最后但同样重要的是,更新 package.json 文件中的 scripts 部分,包含以下内容:

{
  "scripts": {
    "start": "wp-scripts start --webpack-src-dir=resources --output-path=public",
    "build": "wp-scripts build --webpack-src-dir=resources --output-path=public"
  }
}

这会创建两个 npm 脚本命令,startbuild,它们将使用适合你主题的正确配置来运行 @wordpress/scripts 包。

在这种情况下,它会在 resources 文件夹中查找文件,并将它们输出到 public 文件夹。

如果你有不同的文件夹结构,可以调整 --webpack-src-dir--output-path 参数以匹配你的设置。

配置 webpack

@wordpress/scripts 包是基于 webpack 构建的。如果你在构建区块,所有配置都已经为你准备好了。

但是,由于你正在构建主题,你需要用自己的配置覆盖 @wordpress/scripts 包的一些默认配置。

为此,请在主题根目录中创建一个自定义的 webpack.config.js 文件。

// WordPress webpack config.
const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );

// Plugins.
const RemoveEmptyScriptsPlugin = require( 'webpack-remove-empty-scripts' );

// Utilities.
const path = require( 'path' );

// Add any new entry points by extending the webpack config.
module.exports = {
    ...defaultConfig,
    ...{
        entry: {
            'js/editor':  path.resolve( process.cwd(), 'resources/js',   'editor.js'   ),
            'css/screen': path.resolve( process.cwd(), 'resources/scss', 'screen.scss' ),
            'css/editor': path.resolve( process.cwd(), 'resources/scss', 'editor.scss' ),
        },
        plugins: [
            // Include WP's plugin config.
            ...defaultConfig.plugins,

            // Removes the empty `.js` files generated by webpack but
            // sets it after WP has generated its `*.asset.php` file.
            new RemoveEmptyScriptsPlugin( {
                stage: RemoveEmptyScriptsPlugin.STAGE_AFTER_PROCESS_PLUGINS
            } )
        ]
    }
};

自定义 webpack 配置可以在 WordPress 开发者手册高级主题部分的构建过程页面中的配置 webpack 章节找到。

这个配置文件为你的自定义 JavaScript 和 Sass 文件设置了入口点,并告诉 webpack 在哪里找到它们。

它还配置了 webpack-remove-empty-scripts,这样就不会有残留的 JavaScript 文件映射到你的 CSS。

运行构建过程

一切设置完成后,你现在可以运行构建过程了。

要启动开发服务器,请在终端中运行以下命令:

npm run start

这将启动开发服务器并监视你的文件变化。当你对 JavaScript 或 Sass 文件进行更改时,构建过程将自动重新编译它们。

要为生产环境构建主题,请在终端中运行以下命令:

npm run build

加载脚本和样式

在关于包含资源的课程中,你已经学会了如何在主题中加载脚本和样式。

当使用构建过程时,你需要加载编译后的文件,而不是源文件。

如果你打开 public/js 文件夹,你会看到构建过程创建了以下文件:

editor.js
editor.asset.php

资源文件返回一个 PHP 数组,其中包含一个依赖项数组和一个 editor.js 文件的版本号。

然后你可以使用这个数组在主题中加载脚本。

首先,使用相关的钩子并在 functions.php 文件中指定钩子回调函数

// Load editor scripts.
add_action( 'enqueue_block_editor_assets', 'themeslug_editor_assets' );

function themeslug_editor_assets() {

}

在钩子回调函数内部,包含资源文件

$script_asset = include get_theme_file_path( 'public/js/editor.asset.php'  );

最后,使用资源文件中的值加载脚本

    wp_enqueue_script(
        'themeslug-editor',
        get_theme_file_uri( 'public/js/editor.js' ),
        $script_asset['dependencies'],
        $script_asset['version'],
        true
    );

你的最终代码应该如下所示:

add_action( 'enqueue_block_editor_assets', 'themeslug_editor_assets' );
function themeslug_editor_assets() {
    $script_asset = include get_theme_file_path( 'public/js/editor.asset.php'  );
    wp_enqueue_script(
        'themeslug-editor',
        get_theme_file_uri( 'public/js/editor.js' ),
        $script_asset['dependencies'],
        $script_asset['version'],
        true
    );
}

对于任何你想要加载的样式表,过程是类似的。

进一步阅读

关于如何使用 @wordpress/scripts 包 设置构建过程的完整指南,你可以参考 WordPress 开发者手册高级主题部分的构建过程页面。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注