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

@alleyinteractive/create-entry

v0.0.4

Published

Alley's script for scaffolding code for entry points in projects that use @wordpress/scripts

Downloads

432

Readme

Create Entry Point

standard README badge

Alley's create entry point script is a tool to scaffold entry points and slotfills for projects that use @wordpress/scripts for the build system. At a minimum, it generates a TS file for the entry point or slotfill. It also generates an optional CSS file, and a PHP file for enqueueing the entry point with WordPress script registration and enqueues.

This script was written to pair with the Create WordPress Plugin but can easily adopt to other projects which use @wordpress/scripts. It was inspired by the Create Block tool and customized to serve different use cases for scaffolding scripts.

The entry point script, styles, and enqueue are completely encapsulated in a directory improving the experience of maintaining the entry point feature.

This script requires the use of @wordpress/scripts in your project. All generated script files will be Typescript or .ts files. If your project doesn't support Typescript you can change the .ts extension to a .js extension.

Use

Install the package from npm:

npm install --save-dev @alleyinteractive/create-entry

Run the script to generate an entry point:

$ npx @alleyinteractive/create-entry [options]

Without providing any options the tool will prompt the user through several options for creating an entry.

CLI options


  --src-dir string          The directory where the entry points will be written relative to  
                            the current working directory. (default is "entries")             
  -h, --help                Prints this usage guide                                           
  -n, --namespace string    Internal namespace for the entry point. (default is "create-      
                            entry")                                                           
  -s, --slotfill            Create a slotfill entry point.
  -t, --textdomain string   Text domain for setting translated strings for a script. (default 
                            is empty or "default")    

Prompt options

The script will run and will start prompting for the input required to scaffold the entry point.

slug

The slug is the name of the entry point. It also is used:

  • as the entry point slug (required for its identification)
  • as the output location (folder name) for scaffolded files

(Optional) Including a stylesheet

This prompt allows the user to opt-in to scaffolding a .scss file in the entry point.

(Optional) Including a PHP file for enqueueing the entry script and optional stylesheet.

The default option is to include the PHP file for enqueueing the entry, this can be opted out of. The generated file will contain WordPress enqueue hooks and functions to enqueue the entry point assets.

Namespace

If the PHP file is included an optional namespace prompt is provided if the user would like to customize the namespace. Default is 'create-entry'. If the CLI --namespace option is provided this prompt will not show as the namespace has already been set.

Recommended Setup

  • Install create-entry as a dev dependency on a project. e.g. npm install --save-dev @alleyinteractive/create-entry
  • Add a create-entry script command in the projects package.json file to call the script.
  • Add project specific flags to the command setting --src-dir, --namespace, and --textdomain accordingly.
  • Add a separate create-slotfill script command in the projects package.json file with the necessary flags to scaffold a slotfill entry point.

Example in package.json:

"scripts": {
    "create-entry": "npx @alleyinteractive/create-entry --src-dir src --namespace create-wordpress-plugin --textdomain create-wordpress-plugin",
    "create-slotfill": "npx @alleyinteractive/create-entry --slotfill --src-dir src --namespace create-wordpress-plugin --textdomain create-wordpress-plugin",
}

Including the entry points PHP file

In order for the entry point to be registered in WordPress using the generated PHP file, it will need to be included in a project. @wordpress/scripts will copy the PHP file to the build directory so it will need to be included from there.

Lets assume the Webpack output directory is named build. This will be where the entry points should be included from.

Example:

// plugin.php located in the project root.
if ( file_exists( __DIR__ . '/build/entry-point-slug/index.php' ) ) {
	require_once __DIR__ . '/build/entry-point-slug/index.php';
}

Another way would be to autoload all index.php files for each entry from the build directory:

$files = glob( __DIR__ . '/build/**/index.php' );

if ( ! empty( $files ) ) {
    foreach ( $files as $path ) {
        if ( 0 === validate_file( $path ) && file_exists( $path ) ) {
            require_once $path;
        }
    }
}

From Source

This project was written as a Node application with ESM and Typescript support. This project uses Alley's ESLint Typescript configuration that extends Airbnb's ESLint standards.

To work on this repository:

git clone [email protected]:alleyinteractive/alley-scripts.git
cd packages/create-entry
npm ci

In order to test the config with another project, you will need to point to this package, e.g.:

{
  "devDependences": {
    "@alleyinteractive/create-entry": "file:../path/to/alley-scripts/packages/create-entry"
  }
}

Then simply run npm install and npm will symlink to this folder, and you can work on your changes.

Changelog

This project keeps a changelog.

Development Process

See instructions above on installing from source. Pull requests are welcome from the community and will be considered for inclusion. Releases follow semantic versioning and are shipped on an as-needed basis.

Contributing

See our contributor guidelines for instructions on how to contribute to this open source project.

Project Structure

This is an npm package that is published to https://www.npmjs.com/. Dependencies are defined in package.json and the ESLint configuration is found in .eslintrc.json. Typescript configuration is found in tsconfig.json.

Third-Party Dependencies

Third party dependencies are managed by npm and are visible in package.json. This package intends to reduce the dependency load on projects that use it by managing the dependencies itself.

Related Efforts

Maintainers

Alley logo

Contributors

Thanks to all of the contributors to this project.

License

This project is licensed under the GNU Public License (GPL) version 2 or later.