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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
douglasg14b opened this issue Jan 10, 2023 · 4 comments
Open

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

douglasg14b opened this issue Jan 10, 2023 · 4 comments

Comments

@douglasg14b
Copy link

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
Copy link
Author

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

@adrienv1520
Copy link

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
Copy link

@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
Copy link

jorenbroekema commented Dec 19, 2023

This module is CJS-only, see #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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants