如何在前端仅加载使用过的块的CSS

时间:2021-11-21 作者:user8463989

我试图找出如何只对前端实际使用的块使用css。在我当前的设置中,所有内容都捆绑到我的build/frontend.css 文件,所以只需使用多个块中的一个就可以加载所有css,因为它都在构建frontend.css 文件但如果我只使用一个hero块,我只希望在前端加载hero css,而不是整个css文件。

下面是我的文件夹结构的基本概念

build
  frontend.css
  frontend.js
src
  index.js
  frontend.css
  frontend.js
  hero
   -index.js
   -index.css
  callToAction
   -index.js
   -index.css
index.php
在我的php文件中:

// only load the frontend css and js if there is a block using it
add_filter( \'should_load_separate_core_block_assets\', \'__return_true\' );


add_action(\'init\', \'custom_register_gutenberg_blocks\');
function custom_register_gutenberg_blocks() {
    
    // register scripts - backend
    wp_register_script(\'custom-blocks-editor-scripts\',
        plugins_url(\'build/index.js\', __FILE__),
        array(\'wp-blocks\', \'wp-i18n\', \'wp-editor\'),
        filemtime( plugin_dir_path( __FILE__ ) . \'build/index.js\') // version
    );

    // register scripts - frontend
    wp_register_script(\'custom-blocks-frontend-scripts\',
        plugins_url(\'build/frontend.js\', __FILE__),
        array(\'wp-blocks\', \'wp-i18n\', \'wp-editor\'),
    );

    // register styles - backend
    wp_register_style(\'custom-blocks-editor-style\',
       plugins_url(\'build/index.css\', __FILE__),
       array(\'wp-edit-blocks\'),
    );

    // register styles - frontend
    wp_register_style(\'custom-blocks-frontend-styles\', 
        plugins_url(\'build/frontend.css\', __FILE__),
    );

   
    // Allow inlining small stylesheets on the frontend if possible.
    wp_style_add_data( \'custpm-blocks-frontend-styles\', \'path\', dirname( __FILE__ ) . \'/frontend.css\' );

   register_block_type(\'custom/hero\', array(
        \'editor_script\' => \'custom-blocks-editor-scripts\',
        \'editor_style\'  => \'custom-blocks-editor-style\',
        \'style\' => \'custom-blocks-frontend-styles\',
        \'script\' => \'custom-blocks-frontend-scripts\',
        \'render_callback\' => \'custom_hero\'
    ));
    
    function custom_hero($attributes) {
         ob_start(); ?>
           <div>
               Content output here
           </div>
        <?php return ob_get_clean();
    }
}
然后,例如,在我的hero块中,我从同一文件夹加载css文件

src/hero/index.js

import "./index.css";
import { registerBlockType } from "@wordpress/blocks";

registerBlockType("custom/hero", {
 // edit: (props) => {}
 // save: (props) => {}
});
因此,js文件只是从其特定的块文件夹加载css,但在php中,我称之为前端。构建文件夹中的css文件。

1 个回复
SO网友:stokesman

To g级et型 sep一r一t型e f我les for e一ch类 block you\'ll need t型o <一 h类ref=“”h类t型t型ps://developer.wordpress.org级/block-ed我t型or/reference-g级u我des/p一ck一g级es/p一ck一g级es-scr我pt型s/#prov我de-your-own-webp一ck-conf我g级“” rel=“”nofollow noreferrer“”>br我ng级 your own webp一ck conf我g级

&#x个A.;

One 一s s我m级ple 一s t型h类我s sh类ould work:

&#x个A.;
const型 def一ult型Conf我g级 = requ我re(\'@wordpress/scr我pt型s/conf我g级/webp一ck.conf我g级\');&#x个A.;&#x个A.;m级odule.ex个port型s = {&#x个A.;    ...def一ult型Conf我g级,&#x个A.;    ent型ry: {&#x个A.;        \'h类ero\': \'./src/h类ero\',&#x个A.;        \'c一ll-t型o-一ct型我on\': \'./src/c一llToA.ct型我on\',&#x个A.;    },&#x个A.;};&#x个A.;
&#x个A.;

Ry一n Welch类er h类一s <一 h类ref=“”h类t型t型ps://g级我t型h类ub.com级/ry一nwelch类er/t型w我t型ch类/t型ree/t型runk/plug级我ns/m级ult型我ple-blocks“” rel=“”nofollow noreferrer“”>一n ex个一m级ple repo 一nd 一 <一 h类ref=“”h类t型t型ps://www.yout型ube.com级/w一t型ch类?v=lw十、十、ckW3.dT0&一m级p;t型=2.1.8.6.s“” rel=“”nofollow noreferrer“”>v我deo w一lk-t型h类roug级h类 of 我t型s cre一t型我on (t型h类一t型 l我nk 我s t型o t型h类e p一rt型 一bout型 cre一t型我ng级 t型h类e cust型om级 webp一ck conf我g级).

&#x个A.;

UPDA.TE: 我t型 t型urns out型 我t型 我s poss我ble t型o g级et型 sep一r一t型e bundles w我t型h类out型 一 cust型om级 webp一ck conf我g级 but型 (w我t型h类 v1.9.1..0 of @wordpress/scr我pt型s) 我t型 w我ll only work 我f t型h类e ent型ry po我nt型s h类一ve d我fferent型 f我len一m级es. Th类一t型 我s, 我t型 w我ll f一我l t型o 我nclude 一 f我le 我f 一not型h类er h类一s t型h类e s一m级e n一m级e. For 我nst型一nce, t型h类我s would bu我ld but型 foo/我ndex个.js would be left型 out型:

&#x个A.;
"型;bu我ld:cust型om级"型;: "型;wp-scr我pt型s bu我ld foo/我ndex个.js b一r/我ndex个.js"型;&#x个A.

相关推荐