npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

webpack-wordpress-entrypoints

v1.8.4

Published

Generates a file for including scripts

Downloads

136

Readme

webpack-wordpress-entrypoints

Generates a file for including scripts

install

npm i -D webpack-wordpress-entrypoints

Use

const webpackWpEntrypoints = require('webpack-wordpress-entrypoints');

const extractSass = new MiniCssExtractPlugin({
    filename: './css/[name].css',
});
module.exports = (env, argv) => {

    return {
        entry: {
            //The queue specified here affects the output.
            "first": [jsPath + 'first.js'],
            "second": [jsPath + 'second.js'],
            "last": [jsPath + 'last.js'],
        },
        output: {
            path: './dist/',
            filename: 'js/[name].js',
        },
        plugins: [
            extractSass,
            new webpackWpEntrypoints({
                type: 'wp', //Default: wp. If you specify "json" here, the output will be in json format
                path: './', //Main directory where are the theme of the site. Default: './';
                filename: 'wwe_entrypoints.php', //You can specify the path to save the file. The file will be saved in the directory: path + filename. Default: wwe_entrypoints.php
                dependentHandleNameTemplate: '{{name}}~{{i}}~{{file}}', //Applies only to dependent scripts. {{name}} - handle name. {{file}} - file name. {{i}} - the number of scenarios of current entry points
                dependentHandleStyleNameTemplate: '', //Applies only to dependent scripts and styles. Inherited from dependentHandleNameTemplate, if it is empty. {{name}} - handle name. {{file}} - file name. {{i}} - the number of scenarios of current entry points
                entryOptions: {
                    "first": {
                        registerHandleScript: '', //Used for the first argument to the wp_register_script function.
                        registerHandleStyle: '', //Used for the first argument to the wp_register_style function.
                        dependentHandleNameTemplate: '', //Inherited from the main setting.
                        dependentHandleStyleNameTemplate: '', //Inherited from the main setting.
                        dependence: ['second'], //Sets the dependency of this script on another
                        dependenceCss: [], //Sets the dependency of this style on another
                        async: true, //Set the async attribute for this file only.
                        defer: false, //defer and async cannot be installed together, only async will be used
                        footer: true, //Put the script at the bottom of the wordpress site. If set to null, it will only register the script, but not enable it.
                        admin: true, //Include the script to the wordpress admin panel. If set to null, it will only register the script, but not enable it.
                        adminCss: undefined, //Include the style to the wordpress admin panel. If set to null, it will only register the script, but not enable it. Default: same as admin
                        gutenberg: false, //Include the script to the gutenberg editor. If set to null, it will only register the script, but not enable it.
                        gutenbergCss: name, //Include the style to the gutenberg editor. If set to null, it will only register the script, but not enable it. Default: same as gutenberg
                        theme: true, //Include the script to the site theme. If set to null, it will only register the script, but not enable it.
                        themeCss: undefined, //Include the style to the site theme. If set to null, it will only register the script, but not enable it. Default: same as theme
                        excludeScripts: false, //true - Excludes script output. Inherits the value of the main option.
                        excludeStyles: false, //true - Excludes style output. Inherits the value of the main option.
                    },
                },
                criticalStyles: [ //The order of connecting styles depends on the order in which you specify the objects.
                     {
                          test: /critical\..*\.css/, //regexp or function, false - skip. The function receives 3 arguments: fileName, content, info - object with information about the file (only since webpack version >= 5).
                          theme: true, //Does not inherit the values of the main options.
                          admin: false, //Does not inherit the values of the main options.
                          gutenberg: false, //Does not inherit the values of the main options.
                          footer: false, //Does not inherit the values of the main options. Works with theme only.
                          conditions: `is_front_page() || is_archive()`, //wordpress functions are inserted into the "if ({{conditions}})" check condition
                          variableTemplate: undefined, //Template for generating output of styles: {{styles}} - inserts a variable with styles.
                          registerHandleStyle: null, //If set, automatic inclusion on the page will be skipped.
                     }
                ],
                customFiles: { //You can connect your own custom scripts.
                    js: [
                        {
                            src: devMode? `http://localhost:${WPConfig.proxy.port}/browser-sync/browser-sync-client.js` : false, //In this example, we have a condition that is triggered only during development modes. If you specify false, then the script will not be included.
                            handle: false, //If not set, a hash from src will be generated.
                            dependence: undefined, //Inherits the value of the main option. 
                            gutenberg: undefined, //Inherits the value of the main option.
                            admin: undefined, //Inherits the value of the main option.
                            theme: undefined, //Inherits the value of the main option.
                            async: undefined, //Inherits the value of the main option.
                            footer: undefined, //Inherits the value of the main option.
                        },
                    ],
                    css: []
                },
                dependence: ['jquery'], //Sets the dependence of all scripts on the specified. Default: [].
                dependenceCss: [], //Sets the dependence of all styles on the specified. Default: [].
                async: false, //Set the async attribute for all files. Default: false.
                defer: true, //defer and async cannot be installed together, only async will be used. Default: true.
                footer: true, //Put scripts at the bottom of the wordpress site. Default: true.
                admin: false, //Include scripts to the wordpress admin panel. Default: false.
                adminCss: undefined, //Include styles to the wordpress admin panel. Default: same as admin
                gutenberg: false, //Include the script to the gutenberg editor
                gutenbergCss: name, //Include the style to the gutenberg editor. Default: same as gutenberg
                theme: true, //Include scripts to the site theme. Default: true.
                themeCss: undefined, //Include styles to the site theme. Default: same as theme
                excludeScripts: false, //true - Exclude scripts from code generation.
                excludeStyles: false, //true - Exclude styles from code generation.
            }),
        ],
        optimization: {
            splitChunks: {
               cacheGroups: {
                   criticalStyles: { //For this setting to work, the required styles are required to be included as js modules. For example index.js -> import './src/css/some.critical.scss';
                       name: "critical",
                       chunks: "all",
                       test: (module) => {
                           return /critical\.scss/.test(module._identifier);
                       },
                       priority: 20,
                       maxSize: 99999999,
                       enforce: true,
                   }
               },
           }
        },
    };
};

Output result

type=wp

Roughly generated code, this code is unrelated to the above configuration.

<?php
$wwe_template_directory_uri = !empty($wwe_template_directory_uri)? $wwe_template_directory_uri : get_template_directory_uri();
add_filter( "script_loader_tag", function( $tag, $handle ){
    if($handle == "build"){
        return str_replace( " src", " defer src", $tag );
    }
    if($handle == "gutenberg.js.bundle"){
        return str_replace( " src", " defer src", $tag );
    }
    if($handle == "gutenberg"){
        return str_replace( " src", " defer src", $tag );
    }
    return $tag;
}, 10, 2 );
add_action( 'wp_enqueue_scripts', function() use($wwe_template_directory_uri){
    do_action('wwe_wp_enqueue_scripts_before');
    wp_register_script('gutenberg.js.bundle', $wwe_template_directory_uri . '/_dist/js/gutenberg.js.bundle.js', array('jquery'), undefined, true );
    wp_register_script('build', $wwe_template_directory_uri . '/_dist/js/build.ddca7998b98c837c58eb.js', array('gutenberg.js.bundle','jquery'), undefined, true );
    wp_enqueue_script('build');
    wp_register_style('gutenberg.js.bundle', $wwe_template_directory_uri . '/_dist/css/gutenberg.js.bundle.css', array(), undefined );
    wp_register_style('build.ddca7998b98c837c58eb', $wwe_template_directory_uri . '/_dist/css/build.ddca7998b98c837c58eb.css', array(), undefined );
    wp_register_style('gutenberg', $wwe_template_directory_uri . '/theme_plugins/gutenberg/dist/css/gutenberg.css', array(), undefined );
    wp_enqueue_style('gutenberg.js.bundle');
    wp_enqueue_style('build.ddca7998b98c837c58eb');
    wp_enqueue_style('gutenberg');
    do_action('wwe_wp_enqueue_scripts_after');
});
add_action( 'enqueue_block_editor_assets', function() use($wwe_template_directory_uri){
    do_action('wwe_enqueue_block_editor_assets_before');
    wp_register_script('gutenberg', $wwe_template_directory_uri . '/theme_plugins/gutenberg/dist/js/gutenberg.ddca7998b98c837c58eb.js', array('jquery'), undefined, true );
    wp_enqueue_script('gutenberg');
    wp_register_style('gutenberg', $wwe_template_directory_uri . '/theme_plugins/gutenberg/dist/css/gutenberg.css', array(), undefined );
    wp_enqueue_style('gutenberg');
    do_action('wwe_enqueue_block_editor_assets_after');
});
$wwe_style_0 = <<<TEXT
body{font-family:Roboto,sans-serif;color:#0c0f17;}
TEXT;
add_action('wp_enqueue_scripts', function() use($wwe_style_0) {
    if(is_front_page() || is_archive()){
        wp_register_style('wwe_critical_styles-0', false, false, false, true);
        wp_add_inline_style('wwe_critical_styles-0', $wwe_style_0);
        wp_enqueue_style('wwe_critical_styles-0');
    }
}, 1);

type=json

{
  "scripts": [
    {
      "name": "build",
      "file": "_dist/js/build.ddca7998b98c837c58eb.js",
      "dependent": [
        {
          "file": "_dist/js/gutenberg.js.bundle.js",
          "name": "gutenberg.js.bundle",
          "customDependent": [
            "jquery"
          ],
          "defer": true,
          "footer": true
        }
      ],
      "customDependent": [
        "jquery"
      ],
      "async": false,
      "defer": true,
      "footer": true,
      "admin": false,
      "gutenberg": false,
      "theme": true
    },
    {
      "name": "gutenberg",
      "file": "theme_plugins/gutenberg/dist/js/gutenberg.ddca7998b98c837c58eb.js",
      "dependent": [],
      "customDependent": [
        "jquery"
      ],
      "async": false,
      "defer": true,
      "footer": true,
      "admin": false,
      "gutenberg": true,
      "theme": false
    }
  ],
  "styles": [
    {
      "file": "_dist/css/gutenberg.js.bundle.css",
      "name": "gutenberg.js.bundle",
      "customDependent": [],
      "admin": false,
      "gutenberg": false,
      "theme": true
    },
    {
      "file": "_dist/css/build.ddca7998b98c837c58eb.css",
      "name": "build.ddca7998b98c837c58eb",
      "customDependent": [],
      "admin": false,
      "gutenberg": false,
      "theme": true
    },
    {
      "file": "theme_plugins/gutenberg/dist/css/gutenberg.css",
      "name": "gutenberg",
      "customDependent": [],
      "admin": false,
      "gutenberg": true,
      "theme": true
    }
  ]
}