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

@npmcli/template-oss

v4.23.6

Published

templated files used in npm CLI team oss projects

Downloads

23,270

Readme

@npmcli/template-oss

This module bundles the npm CLI team's basics for package development into a single devDependency.

[!WARNING]
THESE CHANGES WILL OVERWRITE LOCAL FILES AND SETTINGS

[!IMPORTANT]
This package does not follow semantic versioning for its API. This package is designed to be installed with --save-exact and therefore will make breaking API changes outside of major versions, including engines narrowing. Major versions are reserved for breaking changes to files written to a repo by this package.

Configuration

Configure the use of @npmcli/template-oss in your package.json using the templateOSS property.

{
  name: 'my-package',
  templateOSS: {
    // copy repo specific files for the root pkg
    rootRepo: true,
    // modify package.json and copy module specific files for the root pkg
    rootModule: true,
    // copy repo files for all workspaces
    workspaceRepo: true,
    // copy module files for all workspaces
    workspaceModule: true,
    // filter allowed workspaces by package name
    // defaults to all workspaces
    workspaces: ['workspace-package-name'],
    // The rest of the config is passed in as variables
    // that can be used to template files in the content
    // directory. Some common ones are:
    // Turns off ci in windows
    windowsCI: false,
    // Change the versions tested in CI and engines
    ciVersions: ['10', '12', '14']
  }
}

Workspaces

Individual workspaces can also supply their own config, if they are included by the root package's templateOSS.workspaces array. These settings will override any of the same settings in the root.

{
  name: 'my-workspace',
  templateOSS: {
    // copy repo files for this workspace
    workspaceRepo: true,
    // copy module files for this workspace
    moduleRepo: true,
    // Changes windowsCI setting for this workspace
    windowsCI: false,
  }
}

Content

All the templated content for this repo lives in lib/content/. The index.js file controls how and where this content is written.

Content files can be overwritten or merged with the existing target file. Merging is only supported for some types of files (ini, yaml, json, package.json)

Each content file goes through the following pipeline:

  1. It is read from its source location
  2. It is compiled using Handlebars with the variables from each packages's config (with some derived values generated in config.js)
  3. It is parsed based on its file extension in parser.js
  4. Additional logic is applied by the parser
  5. It is written to its target location

Usage

This package provides two bin scripts:

template-oss-check

This will check if any of the applied files differ from the target content, or if any of the other associated checks fail. The diffs of each file or check will be reported with instructions on how to fix it.

template-oss-apply [--force]

This will write all source files to their target locations in the cwd. It will do nothing if package.json#templateOSS.version is the same as the version being run. This can be overridden by --force.

This is the script that is run on postinstall.

Extending

lib/apply

This directory is where all the logic for applying files lives. It should be possible to add new files without modifying anything in this directory. To add a file, add the templated file to lib/content/$FILENAME and an entry for it in lib/content/index.js depending on where and when it should be written (root vs workspace, repo vs module, add vs remove, etc).

lib/check

All checks live in this directory and have the same signature. A check must be added to lib/check/index.js for it to be run.

Generic vs specific extensions

This repo is designed so that all (fine, most) of the logic in lib/ is generic and could be applied across projects of many different types.

The files in lib/content are extremely specific to the npm CLI. It would be trivial to swap out this content directory for a different one as it is only referenced in a single place in lib/config.js. However, it's not currently possible to change this value at runtime, but that might become possible in future versions of this package.

Testing

The files test/release/release-manager.js and test/release/release-please.js use recorded nock fixtures to generate snapshots. To update these fixtures run:

GITHUB_TOKEN=$(gh auth token) npm run test:record --- test/release/release-{please,manager}.js

If you only need to update fixtures for one, it's best to only run that single test file.

test/release/release-please.js

This test file uses the repo npm/npm-cli-release-please to record its fixtures. It expects https://github.com/npm/npm-cli-release-please to be checked out in a sibling directory to this repo. It also needs the current branch set to template-oss-mock-testing-branch-do-not-delete before the tests are run.