WordPress.org

Make WordPress Core

Changeset 51259


Ignore:
Timestamp:
06/29/2021 03:08:16 PM (4 weeks ago)
Author:
youknowriad
Message:

Build: Split packages and blocks to their webpack configs.

This also adds support for the viewScript for blocks fixing
the PDF preview for file blocks.

Props desrosj, gziolo.
See #53397.

Location:
trunk
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/.gitignore

    r51258 r51259  
    3030/src/wp-includes/css/*-rtl.css
    3131/src/wp-includes/blocks/**/*.css
     32/src/wp-includes/blocks/**/*.js
     33/src/wp-includes/blocks/**/*.js.map
     34/src/wp-includes/blocks/**/*.asset.php
    3235/packagehash.txt
    3336/artifacts
  • trunk/Gruntfile.js

    r51173 r51259  
    997997                        WORKING_DIR + 'wp-content/themes/twenty*/**/*.js',
    998998                        '!' + WORKING_DIR + 'wp-content/themes/twenty*/node_modules/**/*.js',
     999                        '!' + WORKING_DIR + 'wp-includes/blocks/**/*.js',
    9991000                        '!' + WORKING_DIR + 'wp-includes/js/dist/**/*.js',
    10001001                    ]
  • trunk/src/wp-includes/blocks.php

    r51255 r51259  
    4343            $asset_handle .= '-editor';
    4444        }
     45        if ( 0 === strpos( $field_name, 'view' ) ) {
     46            $asset_handle .= '-view';
     47        }
    4548        return $asset_handle;
    4649    }
     
    4952        'editorScript' => 'editor-script',
    5053        'script'       => 'script',
     54        'viewScript'   => 'view-script',
    5155        'editorStyle'  => 'editor-style',
    5256        'style'        => 'style',
     
    97101        return false;
    98102    }
    99     $script_asset = require $script_asset_path;
    100     $result       = wp_register_script(
     103    $is_core_block       = isset( $metadata['file'] ) && 0 === strpos( $metadata['file'], ABSPATH . WPINC );
     104    $script_uri          = $is_core_block ?
     105        includes_url( str_replace( ABSPATH . WPINC, '', realpath( dirname( $metadata['file'] ) . '/' . $script_path ) ) ) :
     106        plugins_url( $script_path, $metadata['file'] );
     107    $script_asset        = require $script_asset_path;
     108    $script_dependencies = isset( $script_asset['dependencies'] ) ? $script_asset['dependencies'] : array();
     109    $result              = wp_register_script(
    101110        $script_handle,
    102         plugins_url( $script_path, $metadata['file'] ),
    103         $script_asset['dependencies'],
    104         $script_asset['version']
     111        $script_uri,
     112        $script_dependencies,
     113        isset( $script_asset['version'] ) ? $script_asset['version'] : false
    105114    );
    106115    if ( ! $result ) {
     
    108117    }
    109118
    110     if ( ! empty( $metadata['textdomain'] ) ) {
     119    if ( ! empty( $metadata['textdomain'] ) && in_array( 'wp-i18n', $script_dependencies ) ) {
    111120        wp_set_script_translations( $script_handle, $metadata['textdomain'] );
    112121    }
     
    307316    }
    308317
     318    if ( ! empty( $metadata['viewScript'] ) ) {
     319        $settings['view_script'] = register_block_script_handle(
     320            $metadata,
     321            'viewScript'
     322        );
     323    }
     324
    309325    if ( ! empty( $metadata['editorStyle'] ) ) {
    310326        $settings['editor_style'] = register_block_style_handle(
  • trunk/src/wp-includes/class-wp-block-type.php

    r51244 r51259  
    157157
    158158    /**
    159      * Block type editor script handle.
     159     * Block type editor only script handle.
    160160     *
    161161     * @since 5.0.0
     
    165165
    166166    /**
    167      * Block type front end script handle.
     167     * Block type front end and editor script handle.
    168168     *
    169169     * @since 5.0.0
     
    173173
    174174    /**
    175      * Block type editor style handle.
     175     * Block type front end only script handle.
     176     *
     177     * @since 5.0.0
     178     * @var string|null
     179     */
     180    public $view_script = null;
     181
     182    /**
     183     * Block type editor only style handle.
    176184     *
    177185     * @since 5.0.0
     
    181189
    182190    /**
    183      * Block type front end style handle.
     191     * Block type front end and editor style handle.
    184192     *
    185193     * @since 5.0.0
     
    226234     *     @type array         $uses_context     Context values inherited by blocks of this type.
    227235     *     @type array|null    $provides_context Context provided by blocks of this type.
    228      *     @type string|null   $editor_script    Block type editor script handle.
    229      *     @type string|null   $script           Block type front end script handle.
    230      *     @type string|null   $editor_style     Block type editor style handle.
    231      *     @type string|null   $style            Block type front end style handle.
     236     *     @type string|null   $editor_script    Block type editor only script handle.
     237     *     @type string|null   $script           Block type front end and editor script handle.
     238     *     @type string|null   $view_script      Block type front end only script handle.
     239     *     @type string|null   $editor_style     Block type editor only style handle.
     240     *     @type string|null   $style            Block type front end and editor style handle.
    232241     * }
    233242     */
  • trunk/tests/phpunit/data/blocks/notice/block.json

    r49981 r51259  
    4949    "editorScript": "tests-notice-editor-script",
    5050    "script": "tests-notice-script",
     51    "viewScript": "tests-notice-view-script",
    5152    "editorStyle": "tests-notice-editor-style",
    5253    "style": "tests-notice-style"
  • trunk/tests/phpunit/tests/blocks/register.php

    r50927 r51259  
    134134        );
    135135        $this->assertSame(
     136            'unit-tests-my-block-view-script',
     137            generate_block_asset_handle( $block_name, 'viewScript' )
     138        );
     139        $this->assertSame(
    136140            'unit-tests-my-block-editor-style',
    137141            generate_block_asset_handle( $block_name, 'editorStyle' )
     
    156160            'wp-block-paragraph',
    157161            generate_block_asset_handle( $block_name, 'script' )
     162        );
     163        $this->assertSame(
     164            'wp-block-paragraph-view',
     165            generate_block_asset_handle( $block_name, 'viewScript' )
    158166        );
    159167        $this->assertSame(
     
    373381        $this->assertSame( 'tests-notice-editor-script', $result->editor_script );
    374382        $this->assertSame( 'tests-notice-script', $result->script );
     383        $this->assertSame( 'tests-notice-view-script', $result->view_script );
    375384        $this->assertSame( 'tests-notice-editor-style', $result->editor_style );
    376385        $this->assertSame( 'tests-notice-style', $result->style );
  • trunk/tools/webpack/packages.js

    r51212 r51259  
    107107    };
    108108
    109     const dynamicBlockFolders = [
    110         'archives',
    111         'block',
    112         'calendar',
    113         'categories',
    114         'file',
    115         'latest-comments',
    116         'latest-posts',
    117         'loginout',
    118         'page-list',
    119         'post-content',
    120         'post-date',
    121         'post-excerpt',
    122         'post-featured-image',
    123         'post-terms',
    124         'post-title',
    125         'post-template',
    126         'query',
    127         'query-pagination',
    128         'query-pagination-next',
    129         'query-pagination-numbers',
    130         'query-pagination-previous',
    131         'query-title',
    132         'rss',
    133         'search',
    134         'shortcode',
    135         'site-logo',
    136         'site-tagline',
    137         'site-title',
    138         'social-link',
    139         'tag-cloud',
    140     ];
    141     const blockFolders = [
    142         'audio',
    143         'button',
    144         'buttons',
    145         'code',
    146         'column',
    147         'columns',
    148         'cover',
    149         'embed',
    150         'freeform',
    151         'gallery',
    152         'group',
    153         'heading',
    154         'html',
    155         'image',
    156         'list',
    157         'media-text',
    158         'missing',
    159         'more',
    160         'nextpage',
    161         'paragraph',
    162         'preformatted',
    163         'pullquote',
    164         'quote',
    165         'separator',
    166         'social-links',
    167         'spacer',
    168         'table',
    169         'text-columns',
    170         'verse',
    171         'video',
    172         ...dynamicBlockFolders,
    173     ];
    174109    const phpFiles = {
    175110        'block-serialization-default-parser/parser.php': 'wp-includes/class-wp-block-parser.php',
    176         'widgets/src/blocks/legacy-widget/index.php': 'wp-includes/blocks/legacy-widget.php',
    177         ...dynamicBlockFolders.reduce( ( files, blockName ) => {
    178             files[ `block-library/src/${ blockName }/index.php` ] = `wp-includes/blocks/${ blockName }.php`;
    179             return files;
    180         } , {} ),
    181     };
    182     const blockMetadataFiles = {
    183         'widgets/src/blocks/legacy-widget/block.json': 'wp-includes/blocks/legacy-widget/block.json',
    184         ...blockFolders.reduce( ( files, blockName ) => {
    185             files[ `block-library/src/${ blockName }/block.json` ] = `wp-includes/blocks/${ blockName }/block.json`;
    186             return files;
    187         } , {} ),
    188111    };
    189112
     
    230153        from: join( baseDir, `node_modules/@wordpress/${ filename }` ),
    231154        to: join( baseDir, `src/${ phpFiles[ filename ] }` ),
    232     } ) );
    233 
    234     const blockMetadataCopies = Object.keys( blockMetadataFiles ).map( ( filename ) => ( {
    235         from: join( baseDir, `node_modules/@wordpress/${ filename }` ),
    236         to: join( baseDir, `src/${ blockMetadataFiles[ filename ] }` ),
    237     } ) );
    238 
    239     const blockStylesheetCopies = blockFolders.map( ( blockName ) => ( {
    240         from: join( baseDir, `node_modules/@wordpress/block-library/build-style/${ blockName }/*.css` ),
    241         to: join( baseDir, `${ buildTarget }/blocks/${ blockName }/` ),
    242         flatten: true,
    243         transform: ( content ) => {
    244             if ( mode === 'production' ) {
    245                 return postcss( [
    246                     require( 'cssnano' )( {
    247                         preset: 'default',
    248                     } ),
    249                 ] )
    250                     .process( content, { from: 'src/app.css', to: 'dest/app.css' } )
    251                     .then( ( result ) => result.css );
    252             }
    253 
    254             return content;
    255         },
    256         transformPath: ( targetPath, sourcePath ) => {
    257             if ( mode === 'production' ) {
    258                 return targetPath.replace( /\.css$/, '.min.css' );
    259             }
    260 
    261             return targetPath;
    262         }
    263155    } ) );
    264156
     
    353245                    ...cssCopies,
    354246                    ...phpCopies,
    355                     ...blockMetadataCopies,
    356                     ...blockStylesheetCopies,
    357247                ],
    358248            ),
  • trunk/webpack.config.js

    r46586 r51259  
     1const blocksConfig = require( './tools/webpack/blocks' );
    12const mediaConfig = require( './tools/webpack/media' );
    23const packagesConfig = require( './tools/webpack/packages' );
     
    1213
    1314    const config = [
     15        blocksConfig( env ),
    1416        mediaConfig( env ),
    1517        packagesConfig( env ),
Note: See TracChangeset for help on using the changeset viewer.