Make WordPress Core

Changeset 51259


Ignore:
Timestamp:
06/29/2021 03:08:16 PM (5 years 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.