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

semver-try-require

v7.0.0

Published

micro module to require or import (versions of) modules that might not be there

Downloads

1,237,495

Readme

What's this then?

A micro module that helps you require or import (versions of) modules that might not be there.

Useful to test for the availability of optional and peer dependencies before working with them.

Examples

See ESM below if you're using this in an ESM only context.

Commonjs

So you made the typescript compiler (v2) an optional dependency. But you just want to keep running if it ain't there.

Do this:

const tryRequire = require("semver-try-require");

// import typescript if there's a version >= 2 available
const typescript = tryRequire("typescript", ">=2");

// now you can test if typescript is actually there
const lProgram = "const cube = x => x*x*x; console.log(cube(42))";

if (typescript !== false) {
  console.log(typescript.transpileModule(lProgram, {}).outputText);
  // Result:
  //   var cube = function (x) { return x * x * x; };
  //   console.log(cube(42));
} else {
  // typescript >=2 not found - use fallback
  console.log(lProgram);
  // Result:
  //    const cube = x => x*x*x; console.log(cube(42))
}

ESM

In ESM it's almost the same, except there dynamic imports are always asynchronous, so you'll have to await it (or use promises):

import tryImport from "semver-try-require";

// import typescript if there's a version >= 5 available.
const typescript = await tryImport("typescript", >=5);

// now you can test if typescript is actually there
const lProgram = "const cube = x => x*x*x; console.log(cube(42))";

if (typescript !== false) {
  console.log(typescript.transpileModule(lProgram, {}).outputText);
  // Result:
  //   var cube = function (x) { return x * x * x; };
  //   console.log(cube(42));
} else {
  // typescript >=5 not found - use fallback
  console.log(lProgram);
  // Result:
  //    const cube = x => x*x*x; console.log(cube(42))
}

History

This module started to try a few non-run-of-the-mill things with the npm registry (deprecate, beta publishing, renaming). The tryRequire function in dependency-cruiser seemed like a good candidate as it was not a thing that'd be unique to dependency-cruiser, and would probably be easier to maintain on its own anyway. I named it tigerclaws-try-require until I realized the semver check was what distinguished it from the other try-require like npm modules out there.

dependency-cruiser now uses semver-try-require in the transpiler wrappers and it enables it to cruise typescript, coffeescript and livescript code without having to ship the heavy duty compilers for these languages.

License

MIT

Badge & flair section

install, lint and test npm stable version total downloads on npm

Made with :metal: in Holland