TehShrike / deepmerge

A library for deep (recursive) merging of Javascript objects
MIT License
2.75k stars 216 forks source link

deepmerge_1.default) is not a function (No Webpack) #255

Open douglasg14b opened 1 year ago

douglasg14b commented 1 year ago
import deepmerge from 'deepmerge';

deepmerge({}, {});

And ran inside a Jest test, results in:

TypeError: (0 , deepmerge_1.default) is not a function

No webpack, vite, or anything else involved.

douglasg14b commented 1 year ago

Using the require syntax seems to cause some other issues, with there not being typescript types for it?
image

adrienv1520 commented 1 year ago

I have the same issue when using deepmerge in a dockerized REST API using NestJS.

Using

import deepmerge from 'deepmerge';

// ...

deepmerge(car, body, mergeOptions);

Is throwing the following error (0 , deepmerge_1.default) is not a function

Any update on this?

adrienv1520 commented 1 year ago

@douglasg14b one common way to fix this if not already done is to import the library like this:

import * as deepmerge from 'deepmerge';

If your code is compiled somehow somewhere, it will basically tell your compiler to expect a CommonJS require and not an ESModule import which would look for a default property added to the deepmerge reference in your code once compiled.

Hope it helped.

jorenbroekema commented 8 months ago

This module is CJS-only, see https://github.com/TehShrike/deepmerge/issues/250 .

As far as I know you can do this in ESM files to import CJS modules, but this only works in NodeJS, not in the browser for example:

import { createRequire } from 'node:module';

const require = createRequire(import.meta.url);
const deepmerge = require('deepmerge'); // Function

Vice versa, in CJS files you can use dynamic imports to asynchronously import ESM, just FYI.

If you have to use this library in the browser and don't want to use bundlers to transform it and complicate your local dev setup that way, you can use my ESM fork of this lib: https://www.npmjs.com/package/@bundled-es-modules/deepmerge (Github repo)