kanopi/pack-asset-loader

Kanopi Pack Asset Loader 无缝管理开发和生产模式之间的资源URL

1.0.4 2024-01-31 17:10 UTC

This package is auto-updated.

Last update: 2024-08-30 01:26:42 UTC


README

PHP库,用于PHP和WordPress应用程序,以简化使用Kanopi Pack(Webpack包装器)的开发及其发布资源的部署。Loader提供了一种系统性的方法来排队Webpack入口点生成的脚本和样式。

文档参考

Loader配置类

所有资源都使用以下配置参数集进行注册

资产加载器API类

协调从Kanopi Pack配置加载资源的底层类位于Kanopi\Assets\AssetLoader

Webpack生成两种特殊的脚本类型,在特定时间加载,但基于应用程序/网站的现有其他资源是可选的

  1. 运行时 - 存在以协调多个包之间的共享模块。例如,如果app1.jsapp2.js共享Vue3,则生成一个运行时文件(默认为runtime),必须在两者之前加载。
  2. 供应商 - 包含任何第三方导入的模块,无论是列出在requirepackage.json键下,还是通过@import <named_node_module>在入口点中引用。例如,如果app1.jsapp2.js共享Vue3,则生成一个供应商文件(默认为vendor),必须在任何运行时和应用程序入口点之前加载。**注意** - Webpack还可以生成另一个协调文件,默认为central,始终存在于开发服务器上。

WordPress Enqueue注册表

协调Kanopi Pack与WordPress前端和块编辑器的资产排队。

API

主要WordPress注册类位于Kanopi\Assets\Registry\WordPress

WordPress配置说明

在默认实现中,该包假定在调用包之前已定义了常量KANOPI_DEVELOPMENT_ASSET_URL,否则只有生产模式可用

WordPress示例

活动WordPress主题中的单个资源集

考虑以下Kanopi Pack入口点的示例集

module.exports = {
    //... other configuration ...
    "filePatterns": {
        "cssOutputPath": "css/[name].css",
        "entryPoints": {
            "theme": "./assets/src/scss/theme/index.scss",
            "theme-app": "./assets/src/js/theme/index.js"
        },
        "jsOutputPath": "js/[name].js"
    },
    //... other configuration ...
}

以下是一个示例加载器序列,尽管建议将其放置在模块或其他结构中。

use Kanopi\Assets\Registry\WordPress;

$loader = WordPress( 
            new LoaderConfiguration(
				WordPress::read_theme_version(),
				[ 
                    // ... list of Domain names, no protocol or path
                    'domain-name.com',
                    'staging.domain-name.com'
                 ],
				'/assets/dist/webpack-assets.json'
            )
        );

$loader->register_frontend_scripts( function ( $_registry ) {
    $loader = $_registry->asset_loader();
    $loader->register_vendor_script( 'central' );
    $loader->register_vendor_script( 'vendor' );

    $loader->register_runtime_script( 'runtime', [ 'jquery' ] );
    $loader->register_style( 'theme' );
    $loader->register_script( 'theme-app' );

    $loader->enqueue_assets();

    // Required theme stylesheet
    wp_register_style(
        'site-theme',
        esc_url_raw( get_stylesheet_directory_uri() . '/style.css' ),
        [],
        $_registry::read_theme_version();
    );
    wp_enqueue_style( 'site-theme' );
});

添加新脚本或样式

当添加新的脚本或样式时,将其句柄添加到相应的注册函数中。

考虑将新的脚本和样式添加到“歌曲”帖子类型中,如前面示例中所述。

新的配置变为

module.exports = {
    //... other configuration ...
    "filePatterns": {
        "cssOutputPath": "css/[name].css",
        "entryPoints": {
            "song": "./assets/src/scss/song/index.scss",
            "song-app": "./assets/src/js/song/index.js",
            "theme": "./assets/src/scss/theme/index.scss",
            "theme-app": "./assets/src/js/theme/index.js"
        },
        "jsOutputPath": "js/[name].js"
    },
    //... other configuration ...
}
use Kanopi\Assets\Registry\WordPress;

$loader = WordPress( 
            new LoaderConfiguration(
				WordPress::read_theme_version(),
				[ 
                    // ... list of Domain names, no protocol or path
                    'domain-name.com',
                    'staging.domain-name.com'
                 ],
				'/assets/dist/webpack-assets.json'
            )
        );

$loader->register_frontend_scripts( function ( $_registry ) {
    $loader = $_registry->asset_loader();
    $loader->register_vendor_script( 'central' );
    $loader->register_vendor_script( 'vendor' );

    $loader->register_runtime_script( 'runtime', [ 'jquery' ] );
    $loader->register_style( 'theme' );
    $loader->register_style( 'song' );
    $loader->register_script( 'theme-app' );
    $loader->register_script( 'song-app' );

    $loader->enqueue_assets();

    // Required theme stylesheet
    wp_register_style(
        'site-theme',
        esc_url_raw( get_stylesheet_directory_uri() . '/style.css' ),
        [],
        $_registry::read_theme_version();
    );
    wp_enqueue_style( 'site-theme' );
});

将Gutenberg块添加到站点

当添加新的脚本或样式时,将其句柄添加到相应的注册函数中。

考虑将新的“歌曲列表”和“推荐信”块添加到前面示例中的站点。

强烈建议通过具有HMR自动加载功能的公共脚本将所有块添加到站点中。此外,为每个块编写的模块化样式可以包含在其前端样式表中,并单独包含在特定于块编辑器的样式表中,即blocks-theme入口点。

在这个例子中,这两个块既在PHP中注册,也在block-editor入口点注册。这两个块都包含前端脚本功能,歌曲列表是所有页面的小部件,因此在这里也包括。然而,见证块是情境性的,所以我们将让PHP侧的block.json注册其脚本和样式。

新的配置变为

module.exports = {
    //... other configuration ...
    "filePatterns": {
        "cssOutputPath": "css/[name].css",
        "entryPoints": {
            "block-editor": "./assets/src/js/block-editor/index.ts",
            "block-theme": "./assets/src/scss/block-editor/index.scss",
            "song-listing": "./assets/src/scss/song-listing/index.scss",
            "song-listing-app": "./assets/src/js/song-listing/index.js",
            "testimonial": "./assets/src/scss/testimonial/index.scss",
            "testimonial-app": "./assets/src/js/testimonial/index.js",
            "theme": "./assets/src/scss/theme/index.scss",
            "theme-app": "./assets/src/js/theme/index.js"
        },
        "jsOutputPath": "js/[name].js"
    },
    //... other configuration ...
}
use Kanopi\Assets\Registry\WordPress;

$loader = WordPress( 
            new LoaderConfiguration(
				WordPress::read_theme_version(),
				[ 
                    // ... list of Domain names, no protocol or path
                    'domain-name.com',
                    'staging.domain-name.com'
                 ],
				'/assets/dist/webpack-assets.json'
            )
        );

$loader->register_frontend_scripts( function ( $_registry ) {
    $loader = $_registry->asset_loader();
    $loader->register_vendor_script( 'central' );
    $loader->register_vendor_script( 'vendor' );

    $loader->register_runtime_script( 'runtime', [ 'jquery' ] );
    $loader->register_style( 'theme' );
    $loader->register_style( 'song-listing' );
    $loader->register_script( 'theme-app' );
    $loader->register_script( 'song-listing-app' );
    // Note, the Testimonial script and style are not included, the block.json for the block covers conditionally including those assets. Add a dependency handle of kanopi-pack-runtime (or adjust kanopi-pack if you changed the handle prefix) to ensure all of its modules are available.

    $loader->enqueue_assets();

    // Required theme stylesheet
    wp_register_style(
        'site-theme',
        esc_url_raw( get_stylesheet_directory_uri() . '/style.css' ),
        [],
        $_registry::read_theme_version();
    );
    wp_enqueue_style( 'site-theme' );
});

$loader->register_block_editor_scripts( function ( $_registry ) {
    $loader = $_registry->asset_loader();
    $loader->register_vendor_script( 'central' );
    $loader->register_vendor_script( 'vendor' );

    $loader->register_runtime_script( 'runtime', [ 'jquery' ] );
    $loader->register_style( 'block-theme' );
    $loader->register_script( 'block-editor' );

    $loader->enqueue_assets();
});