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

es-modularize

v2.2.6

Published

A browser only library for converting npm package to ES module.

Downloads

37

Readme

es-modularize

Goodbye, bundlers. Hello, es-modularize.


Publish CI npm version

English | 简体中文

A browser only tool for converting npm package to ES module.

Explore this online demo with devtools of your browser to see how this tool resolve, download and load npm packages.

Introduction

Modern browsers support ECMAScript module (i.e. ES Module) natively, so dependency bundler is actually required for small projects.

This library allows the following code to work directly and correctly in browser thanks to a modern feature <script type="importmap">.

// entry.js
import React from "react";
import ReactDOM from "react-dom/client";

If you are using a dependency bundler, your output code may change frequently, although the dependency part is completely unchanged in most cases.

With es-modularize, you won't need to bundle referenced dependencies in the output code, just working like using external script links – your server will no longer need to consume a lot of traffic for bundled dependent content, and you can spend more of the server traffic on the content of the code you write. You'll also maximize the load acceleration that comes with your browser's default caching policy – the content of externally linked scripts is constant for a long time, although it may take some time to load initially.

Unlike external script links, you can still write code in a modular way — you don't need to worry about a lot of external scripts introducing global variables that cause a lot of confusion.

Unlike the compilers and transpilers, es-modularize does not do any parsing and conversion of code. The dependency library code is executed within the browser and the agent's ES Module script is generated based on the evaluated export value.

To run the minimal example, you only need a static resource server and can completely leave the NodeJS toolchain alone. The rest of the work will be done within the browser.

Currently only UMD and CJS packages are supported. For browser importmap support, you might need this tool:

https://github.com/guybedford/es-module-shims

Example

First, include this library via external script link:

<script src="https://unpkg.com/es-modularize@latest/dist/browser.bundle.min.js"></script>

UMD example:

<!-- define import maps -->
<script>
  ESModularize.build({
    imports: {
      react: ESModularize.load("https://unpkg.com/[email protected]/umd/react.development.js").sync().umd("React"),
      "react-dom/client": ESModularize.load("https://unpkg.com/[email protected]/umd/react-dom.development.js")
        .sync()
        .umd("ReactDOM"),
    },
  });
</script>
<!-- now module imports works -->
<script type="module" src="entry.js"></script>

CJS example:

<script>
  ESModularize.createProjectLoader({
    nodeGlobals: {
      process: {
        env: {
          NODE_ENV: "production",
        },
      },
    },
  })
    .load(
      {
        react: "^18",
        "react-dom": "^18",
      },
      ["react", "react-dom/client"]
    )
    .then((importMap) => {
      ESModularize.build(importMap);
    });
</script>
<!-- now module imports works -->
<script type="module" src="entry.js"></script>

License

 __________________
< The MIT license! >
 ------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||