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

babel-register-esm

v1.2.5

Published

ESM loader for Babel, similar to @babel/register

Downloads

1,027

Readme

babel-register-esm

An ESM loader for Babel, similar to @babel/register. It will transpile your files on-the-fly, based on your "babelrc" configuration files.

For more information on Node.js ESM loaders, see here.

This loader also supports importing .ts and .tsx files, which in TypeScript needed to be referred using their JS name (see TypeScript section below).

Installation

npm install babel-register-esm

This package has a peer-dependency on @babel/core, so you do need to install it yourself:

npm install --save-dev @babel/core

Usage

To make on the fly transpilation work, you MUST run Node.js using --loader babel-register-esm.

Example:

// a-file-with-jsx.js
import React from 'react'

console.log((<button>Hi</button>).type)

To run it under Node.js, without transpiling it beforehand, you need to run it thus:

node --loader babel-register-esm a-file-with-jsx.js

Note that in order for this to work, you need the appropriate babelrc.json and plugins installed. E.g., for this example to work, you need to npm-install @babel/plugin-transform-react-jsx" and your babelrc.json needs to look something like this:

{
  "plugins": ["@babel/plugin-transform-react-jsx"]
}

Usage in Mocha (and probably other test-runners)

To use it in Mocha, add loader=babel-register-esm to the mocha arguments, e.g.

mocha --loader=babel-register-esm some-test.js

TypeScript

Since many projects use Babel to transpile TypeScript, this loader deals with a special case for TypeScript ESM. When using TypeScriot in ESM projects, when importing a file, and you need to specify the extension, you should specify .js and not .ts or .tsx! See an example and explanations here.

To deal with this, if you import a .js file, where you meant to import .ts files this loader will try and resolve the non-existant .js file to a .ts or .tsx file (in that order).

Example:

// imported.ts
console.log('loading imported.ts')

// importing.ts
import './imported.js' // yes, `.js` is what *should* be specified as extension!

console.log('loadeing importing.ts')

The above will work, even though imported.js does not exist, because this loader will also alternatively search for the same file with a .ts and .tsx extension.

Note that you still have to specify a .babelrc.json that transpiles TypeScript and TSX. The loader will not transpile this for you. An working example for such a .babelrc.json would be:

{
  "plugins": [
    ["@babel/plugin-transform-typescript", {"isTSX": true}],
    "@babel/plugin-transform-react-jsx"
  ],
  "include": ["**/*.ts", "**/*.tsx"]
}

API

There is no API. This is just an ESM loader.

License

MIT