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

@uswds/compile

v1.2.1

Published

A Gulp-based compiler for USWDS Sass

Downloads

33,663

Readme

USWDS Compile

Simple Gulp 5 functions for copying USWDS static assets and transforming USWDS Sass into browser-readable CSS.

Requirements

Installation

Install @uswds/compile in the project root:

npm install @uswds/compile --save-dev

Usage

Overview

  1. Create a gulpfile.js file in the project root that includes the following:
    • Imported @uswds/compile package
    • Any project path settings you wish to modify (see Path settings, below)
    • Exports for the functions/tasks you need (see Functions, below)
  2. In the terminal run npx gulp [function]

Gulpfile setup

Create a file called gulpfile.js at the root of your project (or use an existing Gulpfile if one already exists). It needs to do the following:

  • Import the @uswds/compile package
  • Set any project settings
  • Export the functions/tasks you need

Here's an example of how your gulpfile.js might look:

/* gulpfile.js */

const uswds = require("@uswds/compile");

/**
 * USWDS version
 */

uswds.settings.version = 3;

/**
 * Path settings
 * Set as many as you need
 */

uswds.paths.dist.css = "./assets/css";
uswds.paths.dist.theme = "./sass";

/**
 * Exports
 * Add as many as you need
 */

exports.init = uswds.init;
exports.compile = uswds.compile;

USWDS version setting

USWDS is changing its file structure and package naming convention starting with USWDS 3.0. Use the USWDS version key to compile properly with the version of USWDS you're using.

When migrating from USWDS 2.x to USWDS 3.x, simply update the value of settings.version to 3 once you've installed @uswds/uswds with npm.

| Setting | Default | Description | | ------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------- | | settings.version | 2 | The major version of the uswds package used in the project. USWDS 2.x projects should use 2 and USWDS 3.x+ projects should use 3. |

Path settings

Use path settings to customize where USWDS Compile looks for USWDS source and outputs processed files. The value of the default may depend on the USWDS version you've defined in settings.version. When applicable, the relevant value of settings.version precedes the default.

| Setting | Default | Description | | ------------------------ | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | paths.src.uswds | 2: "./node_modules/uswds/dist"3: "./node_modules/@uswds" | Source location of the uswds package | | paths.src.sass | 2: "./node_modules/uswds/dist/scss"3: "./node_modules/@uswds/uswds/packages" | Source location of the USWDS Sass | | paths.src.theme | 2: "./node_modules/uswds/dist/scss/theme"3: "./node_modules/@uswds/uswds/dist/theme" | Source location of the USWDS theme files (Sass entry point and starter settings files) | | paths.src.fonts | 2: "./node_modules/uswds/dist/fonts"3: "./node_modules/@uswds/uswds/dist/fonts" | Source location of the USWDS fonts | | paths.src.img | 2: "./node_modules/uswds/dist/img"3: "./node_modules/@uswds/uswds/dist/img" | Source location of the USWDS images | | paths.src.js | 2: "./node_modules/uswds/dist/js"3: "./node_modules/@uswds/uswds/dist/js" | Source location of the USWDS compiled JavaScript files | | paths.src.projectSass | "./sass" | Source location of any existing project Sass files outside of paths.dist.theme. The watch script will watch this directory for changes. | | paths.src.projectIcons | "" | Source location of any additional project icons to include in the icon sprite. (Use only these project icons in the sprite by setting sprite.projectIconsOnly to true.) | | paths.dist.theme | "./sass" | Project destination for theme files (Sass entry point and settings) | | paths.dist.img | "./assets/uswds/images" | Project destination for images | | paths.dist.fonts | "./assets/uswds/fonts" | Project destination for fonts | | paths.dist.js | "./assets/uswds/js" | Project destination for compiled JavaScript | | paths.dist.css | "./assets/uswds/css" | Project destination for compiled CSS |

Additional settings

| Setting | Default | Description | | --------------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | sprite.projectIconsOnly | false | Include only the icons in paths.src.projectIcons in the icon sprite. | | settings.compile.browserslist | ["> 2%", "last 2 versions", "IE 11", "not dead"] | Define the browserslist query for CSS prefixes generated by autoprefixer. | | settings.compile.sassSourcemaps | true | Include sourcemap when compiling SASS to CSS. | | settings.compile.sassDeprecationWarnings | false | Show USWDS Sass deprecation warnings. When set to true, Sass will output deprecation warnings for USWDS code in the terminal during compilation. Deprecation warnings for non-USWDS Sass will output even when this value is set to false. |

Functions

Export USWDS Compile functions in your project's gulpfile.js to use them in your project.

| Function | Description | | -------------- | ---------------------------------------------------------------------------------------------------------------- | | compile | compileSass + compileIcons | | compileIcons | Build the USWDS icon sprite into paths.dist.img | | compileSass | Compile Sass into paths.dist.css | | default | watch | | copyAll | copyTheme + copyAssets | | copyAssets | Copies all static assets: copyFonts + copyImages + copyJS | | copyFonts | Copy USWDS fonts to paths.dist.fonts | | copyImages | Copy USWDS images to paths.dist.img | | copyJS | Copy USWDS compiled JavaScript to paths.dist.js | | copyTheme | Copy USWDS theme files (Sass entry point and settings files) from the uswds package to paths.dist.theme | | init | copyAll + compile | | updateUswds | copyAssets + compile | | watch | Compiles, then recompiles when there are changes to Sass files in paths.dist.theme and paths.src.projectSass |

Running the compile functions

For any function you defined as an export in your gulpfile.js you can run npx gulp [function]

For example, if you have the following gulpfile.js:

/* gulpfile,js */

...

exports.compile = uswds.compile;
exports.watch = uswds.watch;
exports.init = uswds.init;
exports.updateUswds = uswds.updateUswds;
exports.default = uswds.watch;

With that setup, you could do the following in the terminal:

  • Compile Sass: npx gulp compile or npx gulp
  • Watch for changes and recompile: npx gulp watch
  • Initialize a new project: npx gulp init
  • Update USWDS static assets and recompile: npx gulp updateUswds

Usage tips

  • Use init only once. The init task is meant for initializing the design system on a project. Since it will overwrite project files (like settings files and the Sass entry point), use it sparingly and don't use it for updating the design system on a project, or at any point after you've customized your settings files.
  • Stay up-to-date with USWDS with updateUswds. When updating your project's version of USWDS, run the npx gulp updateUswds command to copy any updated USWDS assets into your project. Alternatively, you can run the copyAssets task. These tasks update USWDS static assets (like images, fonts, and compiled JavaScript) and will not override any of your project customizations. These actions might introduce breaking changes, so be sure to check out the related USWDS releases notes for any additional tasks that must be completed when updating to a new version of USWDS.
  • Compile only from a single Sass entry point. Define the location of this entry point with paths.dist.theme. If you have project Sass files outside the paths.dist.theme directory, load these files into your single entry point via @forward, @use, or @import. To include these project Sass files in your gulp watch task, set paths.src.projectSass to your project Sass directory. The Sass will still compile from the single entry point located in paths.dist.theme.
  • Only check theme files and custom icons into version control. You should have a build process that copies static assets like images, fonts, and compiled JavaScript from the uswds package. This assures that these assets are up-to-date with whatever version of USWDS you're using. You only need to track your customizations (like settings, theme files, custom icons, and your gulpfile) in version control.

Updating the USWDS icon sprite

After running either init or copyAssets, you'll find USWDS images in the paths.dist.img directory. Any icon SVG file in usa-icons directory within the paths.dist.img directory will compile into the icon sprite when running the compileIcons function.

Add icons to the icon sprite

  1. Create a directory for the new icons anywhere in your project
  2. Add icons (typically from either uswds-icons or material-icons) to this directory. These icons will be added to the default USWDS icons in the sprite.
  3. In your project Gulpfile, set uswds.paths.src.projectIcons to this new directory. For example
    uswds.paths.src.projectIcons = "./assets/img/my-icons";
  4. Run either the compile or the compileIcons function to compile a new sprite. This sprite includes the USWDS default icons and the new project icons.

Use only project icons in the icon sprite

  1. Create a directory for the new icons anywhere in your project
  2. Add icons (typically from either usa-icons, uswds-icons, or material-icons) to this directory. These will be the only icons included in the sprite.
  3. In your project Gulpfile, set uswds.paths.src.projectIcons to this new directory. For example
    uswds.paths.src.projectIcons = "./assets/img/my-icons";
  4. In your project Gulpfile, set uswds.sprite.projectIconsOnly to true. For example
    uswds.sprite.projectIconsOnly = true;
  5. Run either the compile or the compileIcons function to compile a new sprite. This sprite will include only the new project icons.

Autoprefixer

We use Autoprefixer for maximum browser compatibility. We target the the following browsers. When you compile with the USWDS compiler, we will apply Autoprefixer to all compiled code.

> 2%
last 2 versions
IE 11
not dead

:rocket: