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

@aneuhold/main-scripts

v2.0.6

Published

Main scripts for use personally on any platform

Downloads

441

Readme

Main Scripts

NPM License

This repo contains the main scripts I use on any OS (besides mobile... for now?). This should be installed and initially invoked by the startup script in the dotfiles repo.

If you would like to start a project with this as a basis, feel free to fork / copy and paste into another repo!

📦 Installation

This is typically meant to be installed globally. So for compatibility reasons, the best way to use this is to run:

npm install -g @aneuhold/main-scripts

This can also be used as a dev dependency

✅ Commands

Each command starts with tb. That stands for Tiny Box but that isn't really important 😛.

  • tb help Will emit all the commands and their options
  • tb open Will open the current directory in either VS Code, or Rider depending on the project as it is configured in projects.ts.
  • tb test Just emits a test echo to see if the package is working.
  • tb update Will force update this package.
  • tb fpull Will run git fetch -a then git pull in the current working directory.
  • tb setup Will setup the development environment according to the current working directory name. If settings have not been determined yet for the directory name, shell, or terminal, then it will inform you and won't do anything else.
  • tb startup Will run the startup script for the current system with no arguments
  • tb scaffold [projectType] [projectName] Will build the given project type with the given project name as a new folder in the current working directory named with the given projectName.

Commands specifically for package.json scripts

  • tb pkg validateJsr Will run a few steps, where if one fails, the next do not proceed, with exception of reverting the updates to jsr.json. That always runs if it was changed:
    1. Check if there are any pending changes that haven't been committed
    2. Update the current working directory's jsr.json version field to match the version field in the package.json in the same directory
    3. Run jsr publish --allow-dirty --dry-run to ensure it passes the checks of JSR
    4. Revert the change to the local jsr.json file
  • tb pkg publishJsr Will do the same steps as above, but the jsr command will be jsr publish --allow-dirty. If running locally, this will prompt you to login with your local browser to JSR and permit the publish. In CI, it should handle this without any intervention if the JSR GitHub action is used.

The above do require jsr as a dev dependency

⚠️ Potential Issues

Windows Permissions Error with NPM

Sometimes it seems that permissions get messed up. The only solution seems to go to the Program Files for nodejs and change the permissions for that folder to allow all local users to have full control. Otherwise installing anything with nodejs doesn't seem to work anymore.

Error About Promises.Any when Running Commands

Node likely needs to be updated. Anything 14.x and earlier doesn't support ES2016 syntax pretty sure.

🛠️ Development

🏞 Flow for Writing New Commands

  1. Write the new command in the TypeScript files
  2. Test the command by running yarn refresh. Keep running this whenever you want to test the command again.
  3. When ready to deploy an update to the package
    1. Run yarn version patch
    2. Run yarn lint
    3. Run git push to push to the main branch. Otherwise, feel free to make a PR + run checks + merge it.
  4. When done making changes to the package, use yarn reset:global to set the package to the npm registry version instead of having it linked locally.

package.json Commands

  • yarn refresh can be used for testing new commands. It will uninstall any previous global version of this package and then install the local version.
  • yarn reset:global will uninstall the global package and reinstall it from the npm registry instead of locally.
  • yarn add <package-name> Use yarn to add packages preferably.

Build Process Description

This consists of the following steps:

  • Delete the ./lib folder
  • Generate the files with TypeScript into the ./lib folder, including package.json because it uses that in some parts of the code.
  • Copy over the templates from the templates folder and overwrite because TypeScript does not copy over anything that isn't .ts.

Publish Process Description

  • Run yarn build
  • Packs the files only including the the ./lib folder and the default things included. This does mean that the package.json is going to be in the package twice. But that is okay because the package.json that is in the lib folder will only be used to reference values. It isn't used for commands or locations of any anything.
  • Pushing to main will automatically publish it to NPM

🚧 Commands to be Built

  • tb scaffold node Scaffolds a node project. Ideas on steps are below:
    • Intialize git and ask for a repo link and all that (setup a dedicated step / js file for this because it will be re-used)
    • Initialize npm (package.json)
      • Add the name from the name given
      • Add the scripts with the name given
    • Create README.md
    • Setup ESLINT with JSON config then update the config with specific values if needed
    • Add Typescript and the tsconfig.json file
    • Add prettier and the .prettierrc.json file
    • Update the tsconfig.json to match what is in this project at the moment probably.
    • Setup the build command in the package.json
    • Ideas on implementation
      • There needs to be a way to create the package.json, perhaps it needs to be built in memory first then written? Not sure. Maybe use npm init first and then grab that file? Looks like npm init might not work because it is interactive.