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

kreload

v0.0.0

Published

A small javascript library to support browser live reloading.

Downloads

4

Readme

kreload

A small javascript library to support browser live reloading.

Install

npm install kreload

About this package

The initial motivation of this package was to integrate the live-reloading feature in existing koa.js service. It should make your template-engine based development a bit easier.

For open-sourcing, the package was restructured to remove any web application framework dependencies. In such design, you can integrate this library in any framework (but with node.js). The integration guide below should help you.

To note, this work was not written for production services. Any improvements/suggestions are welcome.

Integration Guide

Hot reloading feature works by

  1. browser HTML page connecting to backend server (using WebSockets)
  2. server sends "file-changed" event to the front-end

To use this package, you need to

  1. inject client-side code (getReloadScript()) into your HTML page
  2. call startWatcher() to launch WebSocket server & monitor FileSystem

Sample

import http from "node:http";
import path from "node:path";
import { fileURLToPath } from "node:url";
import nunjucks from "nunjucks";
import { getReloadScript, startWatcher } from "../../lib/kreload.js";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const TEMPLATE_DIR = path.join(__dirname, "templates");

const PORT = 3000;
const env = nunjucks.configure(TEMPLATE_DIR, { noCache: true });

async function main() {

  // this launches the WebSocket server + FileSystem monitoring
  startWatcher({
    verbose: true,
    watch: [TEMPLATE_DIR]
  });
  
  const server = http.createServer(async (req, res) => {

    try {
      if (req.url === "/") {
        // get client side javascript code
        const code = await getReloadScript({ verbose: true });
        
        // wrap it inside script tag
        const inject = `<script>${code}</script>`;
  
        // append to the original content (note: this is not a proper HTML)
        const html = env.render("index.html", {});
        const body = html + "\n" + inject;

        // respond
        res.writeHead(200, { "Content-Type": "text/html" });
        res.end(body);
      } else {
        res.writeHead(404);
        res.end("Not Found");
      }
    } catch (e) {
      res.writeHead(500);
      res.end("Internal Server Error: " + e);
    }
  });
  
  server.listen(PORT, () => {
    console.log(`http://localhost:${PORT}/`);
  }); 
}

main()
  .catch(e => console.error(e));

Configuration

TBD

License

MIT License LICENSE

Acknowledgement

Reference implementation from reload