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

@grinvald.alexander/slugger

v1.1.0

Published

https://www.notion.so/Lab-create-npm-packages-cdebf3fd535f460da8f3832b0aa07b32

Downloads

8

Readme

https://www.notion.so/Lab-create-npm-packages-cdebf3fd535f460da8f3832b0aa07b32

In this tutorial we will create a utility package called slugger that can turn any blog post title into url friendly slug: e.g: https://myblog.com/june/this-is-a-slugged-blog-post-title

Written by: Ajar ~ Yariv Gilad

Our Mission 🎯


To get oriented with the multi-layered workflow of npm package creation. Consider this as 'hello world' npm package :-)

Let’s begin:


1 - First - take care of the necessary accounts

2 - Set up a node.js project in VS Code

  • On your Desktop - create a ‘workspace’ folder for all of our example projects today if you haven’t already.
  • Inside your workspace, create a new folder named slugger for our first example project and open it in VS Code.
  • Open the terminal (view → terminal, or right-click a file/folder in VS Code files tab and choose ‘open in Terminal’ )
  • Run npm init -y --scope=@your_npm_username (npm init -y [email protected]) Notice we’re scoping the npm package to your npm username. Inspect the name field ****of your package in package.json
  • Next - create a src folder just to keep things tidy and create an index.js file in it.
  • In your package.json, update the main field to src/index.js This will direct npm to use this file as the main entry script file once slugger will be installed and used somewhere.

3 - login to npm in your terminal

  • Login to npm using your terminal. Run either **npm login** or **npm adduser** You will be prompt to enter your npm username, password and a public visible email.
  • You’re supposed to get an approval message once the login was successful. In case you’re not sure, you can always run npm whoami to check your npm login status.

4 - write some code

  • In src/index.js - create a function called slugger that accepts any number of strings as arguments and returns a single string with hyphens between each word like so:  i-am-a-slugged-string-i-contain-no-spaces

5 - Create a consumer

  • While developing, it would make sense to create another file that will use the slugger as if we've installed it and are using it.

  • Create another file under the src folder called consumer.draft.js

  • At this point, let’s install @ajar/marker dependency to log the results out to the console: **npm i @ajar/marker**

  • install nodemon as well as a dev-dependency: **npm i -D nodemon**

  • Add a dev script to package json to run our draft using nodemon:

    "scripts": { "dev": "nodemon src/consumer.draft.js" }

  • In your src/consumer.draft.js write some code that requires the index.js module, where the slugger function exists. require @ajar/marker and print to the console the input string passed to the slugger and the output result to see it works.

  • Run your dev script npm run dev

6 - Publish your package to npm public registry

  • The first publish of a package to npm public registry requires explicit flag telling npm we want to make this package access a public one since we're using scoping which is also used in organisations writing private packages. in your terminal run npm publish --access=public You will notice the npm cli packaging your project files as a tgz and uploading it to the public registry

Congrats 🎉🎉🎉 You've created your first npm public package :) Try to create another project' install your new package from npm and use it.

7 - Add version control to your package

  • In this tutorial we will be using the Conventional Commits convention which is a good habit to get into in any git supported project.
  • In VS Code install an extension called Visual Studio Code Commitizen Support
  • In your terminal, init your slugger project as a git repo git init
  • Add a .gitignore file with at least node_modules mentioned in it.
  • Add all files to the next commit git add .
  • Next, instead of using git commit in your terminal, open the command panel ctrl + Shift + P /command + Shift + P and type Commitizen: conventional commit
  • This will open a small wizard to guide you through the commit convention. Choose the type of your commit, ignore the scope, type a short message saying 'initial commit' and click enter for all the rest for now.
  • After commiting, check the repo status with **git status**
  • If all went well - add your github repo as a remote repo git remote add origin GITHUB-REPO-URL push to github git push origin master
  • Add a README.md file and go through the process again... **git add .** ctrl + Shift + P then choose Commitizen to start the commit process
  • git push origin master

8 - Update your npm package version

  • Assuming all went well so far, let's update the package version on npm using the cli and republishing it.
  • In your terminal run **npm version minor** notice the version field in your package.json was updated to reflect a new minor version. You can use npm version major , **npm version minor** or npm version patch to bump up the relevant version.
  • After updating the version of your package run **npm publish** again to upload the updated version of your package to the npm public registry.
  • Try updating your package in the other project that installed it and uses it.

9 - Add unit testing to your project

  • While many testing tools exists out there, in this tutorial we will use Jest, so first let's install it: **npm i jest -D**

  • in your src folder create another file and name it index.spec.js

  • in your file, require your index.js module where slugger exist. and write a basic test code.

    /**

    • @describe [optional] - group of tests with a header to describe them / describe('testing slugger basic functionality', () => { /*
      • @it - unit tests can use the 'it' syntax / it('slugger can slug string with spaces', () => { ...your code here expect(input).toEqual(output); }) /*
      • @test - unit test can use the 'test' syntax */ test('slugger can slug any number of spacy strings', () => { ...your code here expect(inputs).toEqual(output); }) })
  • Next, let's run those tests. In your package json add a test script

    "scripts": { "dev": "nodemon src/consumer.draft.js", "test": "jest ./src/index.spec.js", "test:watch": "npm test -- --watch", "test:coverage": "npm test -- --coverage" }

  • You can examine the full vocabulary of jest expect here

10 - Next steps

  • Learn how to enrich your README.md file, it makes it so much more enjoyable :) add badges and images or other elements to make your readme stand out while welcoming visitors to your package on npm.
  • Finally, this step is completely optional - as Tibetan monks are accustomed to wash their rich mandala creations to the ocean, let's unpublish our work from the public npm registry: **npm unpublish —force**