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

create-now

v2.0.4

Published

Create projects from templates.

Downloads

46

Readme

now

Create projects from templates. This CLI will bootstrap templates from the /template directory in a GitHub repository linked to form an npm-package.

Usage

Install template for compatible packages like this:

bun create now zero-configuration
bunx create-now zero-configuration . web

Options

bun create now npm-package-name [destination] [template] [variable-values]

The second argument can be used to describe the location where to place the project while the third describes the template to use. Both parameters are optional. If no location is provided the current directory will be used. If there is more than one template available for the package, but no template selected then a prompt will appear.

Example

Use the zero-configuration configuration tool with the web template and place result in /my-site folder.

bun create now zero-configuration my-site web

Create a React Native app managed with numic inside the /my-app folder avoiding the prompt for a bundle name by presetting the variable.

bun create now numic my-app default name=tesla

Templates

The following npm packages provide templates to install with now.

Convention

To configure your package to allow templates to be generated with this plugin you will need a /template folder at the top level.

repository-root
│   README.md
│   package.json
└───template
    │   package.json
    └   index.js

If you want to provide several templates create a folder for each one inside /template and now will prompt the user which one to use. For this to work it's important that there are no other files located in the template root. If there is a default named template available and the user has not selected a template to be used on invocation this one will be used without prompting.

repository-root
│   ...
└───template
    ├───javascript
    │   │   package.json
    │   └   index.js
    │
    ├───typescript
    │   │   package.json
    │   │   index.ts
    │   └   tsconfig.json
    │
    └───[default]
        └   package.json

It's not necessary that the templates are published to npm as they will be downloaded from the git repository linked in the package.json of the respective plugin.

Variables

Template files can be enhanced with static or user-defined variables. Use the EJS to place them in any of your files. Here is an example of a dynamic package.json:

{
  "name": "<%= name %>",
  "description": "<%= description %>"
}

The variable contents need to be defined in a template.json file at the top of your template. Variables are static and need to be defined in advance, while prompts are dynamic and will be prompted to the user when the template is generated. The syntax for prompts matches the npm package with the same name.

{
  "variables": {
    "name": "my-plugin"
  },
  "prompts": [
    {
      "name": "description"
    }
  ]
}

To avoid the prompt the variables can also be supplied as arguments:

bun create now padua ./my-plugin typescript name=my-plugin description="What it does."

Options

In the optional template.json file you can add further options to configure the process.

{
  "variables": {...},
  "prompts": [...],
  "noInstall": true,
  "excludeTransform": ["index.html"]
}

noInstall [false] prevents npm install even if dependencies or devDependencies found in package.json

excludeTransform [none] template variables like <% whatever %> will be ignored, only one's with <# here #> will be replaced.

Programmatic Usage

import { create } from 'create-now'

await create('papua')
// Arguments two and three are optional.
// Will throw an error if there are several templates but none has been selected.
await create('padua', 'new-plugin', 'javascript')
// Use '.' for the second argument for current folder.
await create('papua', '.')