245 lines
5.9 KiB
Markdown
245 lines
5.9 KiB
Markdown
|
<p align="center">
|
||
|
<a href="http://gulpjs.com">
|
||
|
<img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
|
||
|
</a>
|
||
|
</p>
|
||
|
|
||
|
# interpret
|
||
|
|
||
|
[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Coveralls Status][coveralls-image]][coveralls-url]
|
||
|
|
||
|
A dictionary of file extensions and associated module loaders.
|
||
|
|
||
|
## What is it
|
||
|
|
||
|
This is used by [Liftoff] to automatically require dependencies for configuration files, and by [rechoir] for registering module loaders.
|
||
|
|
||
|
## How to use it
|
||
|
|
||
|
Consumers should use the exported `extensions` or `jsVariants` object to determine which module should be loaded for a given extension. If a matching extension is found, consumers should do the following:
|
||
|
|
||
|
1. If the value is null, do nothing.
|
||
|
2. If the value is a string, try to require it.
|
||
|
3. If the value is an object, try to require the `module` property. If successful, the `register` property (a function) should be called with the module passed as the first argument. **Advanced:** An optional second argument can be provided to replace the default configuration for a hook.
|
||
|
4. If the value is an array, iterate over it, attempting step #2 or #3 until one of the attempts does not throw.
|
||
|
|
||
|
## API
|
||
|
|
||
|
This module provides two top-level properties: `extensions` and `jsVariants`.
|
||
|
|
||
|
**Note:** This module does not depend on any of the loaders it recommends; instead, end-users are expected to install the hooks they want to use for the file types they want to use. See supported extensions and their hooks in the sections below.
|
||
|
|
||
|
### `extensions`
|
||
|
|
||
|
A mapping of file extensions to modules which provide a [require.extensions] loader.
|
||
|
|
||
|
File extension keys are all in the format of `'.foo'` or `'.foo.bar'` and module loader values are either `null` if the loader should fallthrough to node's loader,
|
||
|
or a string representing the module to be required, an object of `{ module: 'foobar', register: function }`, or an array containing those strings and/or objects.
|
||
|
|
||
|
A sample of an entry containing multiple hooks would look like:
|
||
|
|
||
|
```js
|
||
|
{
|
||
|
'.ts': [
|
||
|
'ts-node/register',
|
||
|
'sucrase/register/ts',
|
||
|
{
|
||
|
module: '@babel/register',
|
||
|
register: function(hook) {
|
||
|
hook({
|
||
|
extensions: '.ts',
|
||
|
rootMode: 'upward-optional',
|
||
|
ignore: [ignoreNonBabelAndNodeModules],
|
||
|
});
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
}
|
||
|
```
|
||
|
|
||
|
**Supported extensions and their hooks**
|
||
|
|
||
|
```yaml file=scripts/extensions.yaml
|
||
|
.babel.js:
|
||
|
- '@babel/register'
|
||
|
.babel.jsx:
|
||
|
- '@babel/register'
|
||
|
.babel.ts:
|
||
|
- '@babel/register'
|
||
|
.babel.tsx:
|
||
|
- '@babel/register'
|
||
|
.cjs:
|
||
|
- interpret/cjs-stub
|
||
|
.coffee:
|
||
|
- coffeescript/register
|
||
|
.coffee.md:
|
||
|
- coffeescript/register
|
||
|
.cts:
|
||
|
- ts-node/register
|
||
|
.esbuild.js:
|
||
|
- esbuild-register/dist/node
|
||
|
.esbuild.jsx:
|
||
|
- esbuild-register/dist/node
|
||
|
.esbuild.ts:
|
||
|
- esbuild-register/dist/node
|
||
|
.esbuild.tsx:
|
||
|
- esbuild-register/dist/node
|
||
|
.esm.js:
|
||
|
- esm
|
||
|
.js:
|
||
|
- built-in node.js loader
|
||
|
.json:
|
||
|
- built-in node.js loader
|
||
|
.json5:
|
||
|
- json5/lib/register
|
||
|
.jsx:
|
||
|
- '@babel/register'
|
||
|
- sucrase/register/jsx
|
||
|
.litcoffee:
|
||
|
- coffeescript/register
|
||
|
.mdx:
|
||
|
- '@mdx-js/register'
|
||
|
.mjs:
|
||
|
- interpret/mjs-stub
|
||
|
.node:
|
||
|
- built-in node.js loader
|
||
|
.sucrase.js:
|
||
|
- sucrase/dist/register
|
||
|
.sucrase.jsx:
|
||
|
- sucrase/dist/register
|
||
|
.sucrase.ts:
|
||
|
- sucrase/dist/register
|
||
|
.sucrase.tsx:
|
||
|
- sucrase/dist/register
|
||
|
.swc.js:
|
||
|
- '@swc/register'
|
||
|
.swc.jsx:
|
||
|
- '@swc/register'
|
||
|
.swc.ts:
|
||
|
- '@swc/register'
|
||
|
.swc.tsx:
|
||
|
- '@swc/register'
|
||
|
.toml:
|
||
|
- toml-require
|
||
|
.ts:
|
||
|
- ts-node/register
|
||
|
- sucrase/register/ts
|
||
|
- '@babel/register'
|
||
|
- esbuild-register/dist/node
|
||
|
- '@swc/register'
|
||
|
.tsx:
|
||
|
- ts-node/register
|
||
|
- sucrase/register/tsx
|
||
|
- '@babel/register'
|
||
|
- esbuild-register/dist/node
|
||
|
- '@swc/register'
|
||
|
.yaml:
|
||
|
- yaml-hook/register
|
||
|
.yml:
|
||
|
- yaml-hook/register
|
||
|
```
|
||
|
|
||
|
### `jsVariants`
|
||
|
|
||
|
The `jsVariants` is the same mapping as above, but only include the extensions which are variants of JavaScript.
|
||
|
|
||
|
**Supported extensions and their hooks**
|
||
|
|
||
|
```yaml file=scripts/jsVariants.yaml
|
||
|
.babel.js:
|
||
|
- '@babel/register'
|
||
|
.babel.jsx:
|
||
|
- '@babel/register'
|
||
|
.babel.ts:
|
||
|
- '@babel/register'
|
||
|
.babel.tsx:
|
||
|
- '@babel/register'
|
||
|
.cjs:
|
||
|
- interpret/cjs-stub
|
||
|
.coffee:
|
||
|
- coffeescript/register
|
||
|
.coffee.md:
|
||
|
- coffeescript/register
|
||
|
.esbuild.js:
|
||
|
- esbuild-register/dist/node
|
||
|
.esbuild.jsx:
|
||
|
- esbuild-register/dist/node
|
||
|
.esbuild.ts:
|
||
|
- esbuild-register/dist/node
|
||
|
.esbuild.tsx:
|
||
|
- esbuild-register/dist/node
|
||
|
.esm.js:
|
||
|
- esm
|
||
|
.js:
|
||
|
- built-in node.js loader
|
||
|
.jsx:
|
||
|
- '@babel/register'
|
||
|
- sucrase/register/jsx
|
||
|
.litcoffee:
|
||
|
- coffeescript/register
|
||
|
.mdx:
|
||
|
- '@mdx-js/register'
|
||
|
.mjs:
|
||
|
- interpret/mjs-stub
|
||
|
.sucrase.js:
|
||
|
- sucrase/dist/register
|
||
|
.sucrase.jsx:
|
||
|
- sucrase/dist/register
|
||
|
.sucrase.ts:
|
||
|
- sucrase/dist/register
|
||
|
.sucrase.tsx:
|
||
|
- sucrase/dist/register
|
||
|
.swc.js:
|
||
|
- '@swc/register'
|
||
|
.swc.jsx:
|
||
|
- '@swc/register'
|
||
|
.swc.ts:
|
||
|
- '@swc/register'
|
||
|
.swc.tsx:
|
||
|
- '@swc/register'
|
||
|
.ts:
|
||
|
- ts-node/register
|
||
|
- sucrase/register/ts
|
||
|
- '@babel/register'
|
||
|
- esbuild-register/dist/node
|
||
|
- '@swc/register'
|
||
|
.tsx:
|
||
|
- ts-node/register
|
||
|
- sucrase/register/tsx
|
||
|
- '@babel/register'
|
||
|
- esbuild-register/dist/node
|
||
|
- '@swc/register'
|
||
|
```
|
||
|
|
||
|
## License
|
||
|
|
||
|
MIT
|
||
|
|
||
|
<!-- prettier-ignore-start -->
|
||
|
|
||
|
[downloads-image]: https://img.shields.io/npm/dm/interpret.svg?style=flat-square
|
||
|
|
||
|
[npm-url]: https://www.npmjs.com/package/interpret
|
||
|
|
||
|
[npm-image]: https://img.shields.io/npm/v/interpret.svg?style=flat-square
|
||
|
|
||
|
[ci-url]: https://github.com/gulpjs/interpret/actions?query=workflow:dev
|
||
|
|
||
|
[ci-image]: https://img.shields.io/github/workflow/status/gulpjs/interpret/dev?style=flat-square
|
||
|
|
||
|
[coveralls-url]: https://coveralls.io/r/gulpjs/interpret
|
||
|
|
||
|
[coveralls-image]: https://img.shields.io/coveralls/gulpjs/interpret/master.svg?style=flat-square
|
||
|
|
||
|
<!-- prettier-ignore-end -->
|
||
|
|
||
|
<!-- prettier-ignore-start -->
|
||
|
|
||
|
[Liftoff]: http://github.com/gulpjs/liftoff
|
||
|
|
||
|
[rechoir]: http://github.com/gulpjs/rechoir
|
||
|
|
||
|
[require.extensions]: https://nodejs.org/api/modules.html#requireextensions
|
||
|
|
||
|
<!-- prettier-ignore-end -->
|