mirror of
https://github.com/zulip/zulip.git
synced 2025-11-14 19:06:09 +00:00
zjsunit: Try to document the difference between CJS and ES modules.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
@@ -38,6 +38,35 @@ exports.start = () => {
|
|||||||
Module._load = load;
|
Module._load = load;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// We provide `mock_cjs` for mocking a CommonJS module, and `mock_esm` for
|
||||||
|
// mocking an ES6 module.
|
||||||
|
//
|
||||||
|
// A CommonJS module:
|
||||||
|
// - loads other modules using `require()`,
|
||||||
|
// - assigns its public contents to the `exports` object or `module.exports`,
|
||||||
|
// - consists of a single JavaScript value, typically an object or function,
|
||||||
|
// - when imported by an ES6 module:
|
||||||
|
// * is shallow-copied to a collection of immutable bindings, if it's an
|
||||||
|
// object,
|
||||||
|
// * is converted to a single default binding, if not.
|
||||||
|
//
|
||||||
|
// An ES6 module:
|
||||||
|
// - loads other modules using `import`,
|
||||||
|
// - declares its public contents using `export` statements,
|
||||||
|
// - consists of a collection of live bindings that may be mutated from inside
|
||||||
|
// but not outside the module,
|
||||||
|
// - may have a default binding (that's just syntactic sugar for a binding
|
||||||
|
// named `default`),
|
||||||
|
// - when required by a CommonJS module, always appears as an object.
|
||||||
|
//
|
||||||
|
// Most of our own modules are ES6 modules.
|
||||||
|
//
|
||||||
|
// For a third party module available in both formats that might present two
|
||||||
|
// incompatible APIs (especially if the CommonJS module is a function),
|
||||||
|
// Webpack will prefer the ES6 module if its availability is indicated by the
|
||||||
|
// "module" field of package.json, while Node.js will not; we need to mock the
|
||||||
|
// format preferred by Webpack.
|
||||||
|
|
||||||
exports.mock_cjs = (request, obj) => {
|
exports.mock_cjs = (request, obj) => {
|
||||||
const filename = Module._resolveFilename(
|
const filename = Module._resolveFilename(
|
||||||
request,
|
request,
|
||||||
|
|||||||
Reference in New Issue
Block a user