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

esbuild-plugin-css-modules

v0.3.0

Published

Plugin for esbuild with partial support of css-modules

Downloads

6,519

Readme

esbuild-plugin-css-modules

Node.js CI

Plugin for esbuild to support css-modules

Install

npm i -D esbuild esbuild-plugin-css-modules

Usage example

Create file src/test.module.css:

.localName {
  background: red;
}

Create file src/index.js:

import s from "./test.module.css";
console.log(s.localName);

Create file build.js:

const esbuild = require("esbuild");
const cssModulesPlugin = require("esbuild-plugin-css-modules");

esbuild
  .build({
    entryPoints: ["src/index.js"],
    bundle: true,
    outfile: "bundle.js",
    plugins: [
      cssModulesPlugin({
        localIdentName: "[local]--[hash:8:md5:hex]",
      }),
    ],
  })
  .catch((e) => console.error(e.message));

Run:

node build.js

File named bundle.css with following content will be created (actual hash can be different):

.localName--hc2cb51f4 {
  background: red;
}

Import of this module in JS bundle will be resolved to class name map:

  // ...
  var result = {localName: "localName--hc2cb51f4"};
  var test_module_default = result;
  // ...

Options

When instantiating plugin you can pass an optional objects with options. This object has following type:

interface Options {
  localIdentName?: string;
  extension?: string;
}
  • localIdentName - pattern for renaming local CSS class names. Defaults to [hash]. Can contain following replacement tokens:

    • [local] - local class name
    • [ext] - original file name extension
    • [name] - original file local name (without path)
    • [path] - only path of full original file name
    • [folder] - local name of a parent folder of original file
    • [hash], [hash:length], [hash:length:algorithm], [hash:length:algorithm:digest] - cryptographic hash of string, built by pattern full_css_file_path:local_class_name, with specified hash algorithm, digest type and maximum result string length. For example, [hash:8:md4:base64]. Supported digest types: base64 and hex. Supported algorithms: md4, md5, sha256 and sha512. Default algorithm is md4, default digest is hex, default maximum length is 32
  • extension - file extension to enable CSS-modules for. Defaults to .module.css