# cjs-faker

> Fakes commonJS boilerplate to allow importing legacy code as an ES6 module

Latest version **0.1.0** (published 2017-09-10) · Apache-2 license · 0 weekly downloads

## Install

```sh
npm install cjs-faker
pnpm add cjs-faker
yarn add cjs-faker
bun add cjs-faker
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.0 |
| Published | 2017-09-10 |
| First published | 2017-09-10 |
| Weekly downloads | 0 |
| License | Apache-2 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Sam Thorogood |
| Maintainers | samthor |

## Links

- npm: https://www.npmjs.com/package/cjs-faker
- Repository: https://github.com/samthor/cjs-faker
- Homepage: https://github.com/samthor/cjs-faker#readme
- Issues: https://github.com/samthor/cjs-faker/issues
- npm.io page: https://npm.io/package/cjs-faker

## Recent versions

- 0.1.0 (latest) — 2017-09-10

## README

cjs-faker fakes commonJS and AMD boilerplate to allow importing legacy code via ES6 modules.

This is implemented by providing fake `exports`/`module.exports`, `require()` and `define()` calls that are used by the commonJS or AMD code being included.
You must shim _all_ modules that you depend on.

# Rationale

This approach is mostly a thought experiment in evaluating legacy code at runtime, rather than requiring a build step (as `require()` and `define()` are not supported natively by browsers).

For most practical purposes, you'll be better off using Rollup with [its commonJS plugin](https://github.com/rollup/rollup-plugin-commonjs).
Using Rollup requires a build step before you can import legacy code as an ES6 module, but doesn't require a shim per module in the dependency tree.

# Usage

Usage requires providing a shim around all commonJS or AMD modules:

```js
// wrap_base64.js
import faker from './node_modules/cjs-faker/cjs-faker.js';
import 'https://cdn.rawgit.com/mathiasbynens/base64/a8d7cabd/base64.js';
export default faker('base64');
```

Now you can just use the `base64` module inside ES6:

```js
import base64 from './wrap_base64.js';
console.info(base64.encode('Hello!'));

// or use require() itself for already wrapped modules
const base64 = require('base64');
```

No build steps are required.

## Dependency Tree

If you depend on commonJS module A, which depends on commonJS module B etc, you must provide the shim for B first, then A.
The default `faker` method in the examples fills a registry that is available via the global `require()` call, so B has to be shimmed first for A's `require('a')` call to succeed.

See file B:

```js
// wrap_b.js
import faker from './node_modules/cjs-faker/cjs-faker.js';
import './path/to/b.js';
export default faker('b');
```

And file A:

```js
// wrap_a.js
import faker from './node_modules/cjs-faker/cjs-faker.js';
import './path/to/a.js';
export default faker('a');
```

---
_Source: https://npm.io/package/cjs-faker · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
