Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add info about ES modules to docs #10611

Merged
merged 3 commits into from Oct 10, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 16 additions & 0 deletions docs/ECMAScriptModules.md
@@ -0,0 +1,16 @@
---
id: ecmascript-modules
title: ECMAScript Modules
---

Jest ships with _experimental_ support for ECMAScript Modules (ESM).

> Note that due to its experimental nature there are many bugs and missing features in Jest's implementation, both known and unknown. You should check out the [tracking issue](https://github.com/facebook/jest/issues/9430) and the [label](https://github.com/facebook/jest/labels/ES%20Modules) on the issue tracker for the latest status.

> Also note that the APIs Jest uses to implement ESM support is still [considered experimental by Node](https://nodejs.org/api/vm.html#vm_class_vm_module) (as of version `14.13.1`).

With the warnings out of the way, this is how you activate ESM support in your tests.

1. Ensure you either disable [code transforms](./configuration#transform-objectstring-pathtotransformer--pathtotransformer-object) by passing `transform: {}` or otherwise configure your transformer to emit ESM rather than the default CommonJS (CJS).
1. Execute `node` with `--experimental-vm-modules`, e.g. `node --experimental-vm-modules node_modules/.bin/jest` or `NODE_OPTIONS=--experimental-vm-modules npx jest` etc.
1. Beyond that, we attempt to follow `node`'s logic for activating "ESM mode" (such as looking at `type` in `pakcgae.json` or `mjs` files), see [their docs](https://nodejs.org/api/esm.html#esm_enabling) for details
SimenB marked this conversation as resolved.
Show resolved Hide resolved
1 change: 1 addition & 0 deletions website/sidebars.json
Expand Up @@ -17,6 +17,7 @@
"manual-mocks",
"es6-class-mocks",
"bypassing-module-mocks",
"ecmascript-modules",
"webpack",
"puppeteer",
"mongodb",
Expand Down
17 changes: 17 additions & 0 deletions website/versioned_docs/version-26.0/ECMAScriptModules.md
@@ -0,0 +1,17 @@
---
id: version-26.0-ecmascript-modules
title: ECMAScript Modules
original_id: ecmascript-modules
---

Jest ships with _experimental_ support for ECMAScript Modules (ESM).

> Note that due to its experimental nature there are many bugs and missing features in Jest's implementation, both known and unknown. You should check out the [tracking issue](https://github.com/facebook/jest/issues/9430) and the [label](https://github.com/facebook/jest/labels/ES%20Modules) on the issue tracker for the latest status.

> Also note that the APIs Jest uses to implement ESM support is still [considered experimental by Node](https://nodejs.org/api/vm.html#vm_class_vm_module) (as of version `14.13.1`).

With the warnings out of the way, this is how you activate ESM support in your tests.

1. Ensure you either disable [code transforms](./configuration#transform-objectstring-pathtotransformer--pathtotransformer-object) by passing `transform: {}` or otherwise configure your transformer to emit ESM rather than the default CommonJS (CJS).
1. Execute `node` with `--experimental-vm-modules`, e.g. `node --experimental-vm-modules node_modules/.bin/jest` or `NODE_OPTIONS=--experimental-vm-modules npx jest` etc.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My tests for tslib didn't need these flags, just making sure that the root package json is a "type": "module" - https://github.com/microsoft/tslib/tree/master/test/esm-node-native

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@orta
That鈥檚聽because your聽tests don鈥檛聽use聽Jest, which聽runs聽tests in聽vm聽contexts, where聽the聽Module聽API needs聽that聽flag.

Copy link
Member Author

@SimenB SimenB Oct 10, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, see the https://nodejs.org/api/vm.html#vm_class_vm_module link above.

EDIT: Ergh, same link as @ExE-Boss posted 馃槄

1. Beyond that, we attempt to follow `node`'s logic for activating "ESM mode" (such as looking at `type` in `pakcgae.json` or `mjs` files), see [their docs](https://nodejs.org/api/esm.html#esm_enabling) for details
SimenB marked this conversation as resolved.
Show resolved Hide resolved
45 changes: 45 additions & 0 deletions website/versioned_sidebars/version-26.0-sidebars.json
@@ -0,0 +1,45 @@
{
"version-26.0-docs": {
"Introduction": [
"version-26.0-getting-started",
"version-26.0-using-matchers",
"version-26.0-asynchronous",
"version-26.0-setup-teardown",
"version-26.0-mock-functions",
"version-26.0-jest-platform",
"version-26.0-jest-community",
"version-26.0-more-resources"
],
"Guides": [
"version-26.0-snapshot-testing",
"version-26.0-tutorial-async",
"version-26.0-timer-mocks",
"version-26.0-manual-mocks",
"version-26.0-es6-class-mocks",
"version-26.0-bypassing-module-mocks",
"version-26.0-ecmascript-modules",
"version-26.0-webpack",
"version-26.0-puppeteer",
"version-26.0-mongodb",
"version-26.0-dynamodb",
"version-26.0-tutorial-jquery",
"version-26.0-watch-plugins",
"version-26.0-migration-guide",
"version-26.0-troubleshooting",
"version-26.0-architecture"
],
"Framework Guides": [
"version-26.0-tutorial-react",
"version-26.0-tutorial-react-native",
"version-26.0-testing-frameworks"
],
"API Reference": [
"version-26.0-api",
"version-26.0-expect",
"version-26.0-mock-function-api",
"version-26.0-jest-object",
"version-26.0-configuration",
"version-26.0-cli"
]
}
}