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

@jensbodal/peer-dependency-enforcer

v0.3.2

Published

Peer dependency enforcement utils

Downloads

6

Readme

Peer Dependency Enforcer

Installation

peer-dependency-enforcer on npmjs.com

npm install --save-dev @jensbodal/peer-dependency-enforcer
yarn add -ED  @jensbodal/peer-dependency-enforcer

Usage

./node_modules/.bin/peer-dependency-enforcer --help

General

yargs is used to parse command line arguments, therefore boolean flags can be passed like:

# --throwUnmet === --throw-unmet

# set to true
peer-dependency-enforcer --throwUnmet
peer-dependency-enforcer --throwUnmet true
peer-dependency-enforcer --throwUnmet=true

# set to false
peer-dependency-enforcer --no-logUnmet
peer-dependency-enforcer --logUnmet false
peer-dependency-enforcer --logUnmet=false

For library authors

See listRuntimeDependencies or validateInstalledDeps (TODO)

For library consumers

If you are not creating a package to be consumed by others, then you'll want to ensure that you are satisfying your 1st party package peer dependencies.

// in your package.json
"scripts": {
    "postinstall": "peer-dependency-enforcer validatePeerDeps"
},

By default the script will fail and throw an error only if there are missing peer dependencies. Otherwise all missing and unmet peer dependencies are logged by default.

See peer-dependency-enforcer --help for more information

Defaults

By default, the following directories are ignored:

.git
build           // add back with --with-build
node_modules

Additional directories can be ignored via --ignore-dir

By default, the following extensions are included for parsing:

.ts
.tsx
.js
.jsx

This list can be appended to with --include-extension

The list can be replaced entirely with --extension

By default, the following module prefixes are ignored:

.
@/
/
src

This list can be appended to with --ignore-module-prefix

This list can be replaced entirely with --module-prefix

By default, all built in modules (e.g. 'fs' or 'path') are ignored

This can be overridden via --with-built-in

TODO

This should probably be maintained elsewhere but leaving here for now:

  • Provide alternative logic for dependencies declared in test files
  • Possibly print version information with output
  • Possibly print file information with output
  • Add test coverage report
  • Add more tests :)
  • Instead of filtering out all @types, return only those that don't have a matching package
    • @types/foo with installed package foo is good
    • @types/bar without any installed package bar is probably bad
  • Allow configuration of test vs runtime files. Still good to know what dependencies are used, however any dependencies used in test code or test setup should not be considered runtime code that needs to have its 3rd party dependencies in peerDependencies.