music-metadata: Can not import the library

Bug description I can not import the package from node. I spent 10h.

Expected behavior The package is imported and I can use the parseFile function.

Audio file demonstrating the problem ~/music-metadata
❯ npm i music-metadata

added 17 packages, and audited 18 packages in 1s

8 packages are looking for funding run npm fund for details

found 0 vulnerabilities

~/music-metadata-test  
❯ node
Welcome to Node.js v18.4.0.
Type ".help" for more information.
> require('music-metadata')
Uncaught:
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/janwirth/music-metadata/node_modules/music-metadata/lib/index.js not supported.
Instead change the require of index.js in null to a dynamic import() which is available in all CommonJS modules.
    at __node_internal_captureLargerStackTrace (node:internal/errors:477:5)
    at new NodeError (node:internal/errors:388:5)
    at Module._extensions..js (node:internal/modules/cjs/loader:1139:19)
    at Module.load (node:internal/modules/cjs/loader:988:32)
    at Module._load (node:internal/modules/cjs/loader:834:12)
    at Module.require (node:internal/modules/cjs/loader:1012:19)
    at require (node:internal/modules/cjs/helpers:102:18) {
  code: 'ERR_REQUIRE_ESM'
}

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 23 (7 by maintainers)

Most upvoted comments

@Borewit In the case the documentation contains the information the problem with the reader, in the case the documentation doesn’t contain a necessary information or it’s not clear, it’s the documentation 😃

Friendly recommendation: While you are arguing with me and trying to prove something, you could update your doc and close this issue with an answer: I’ve updated the doc accordingly so this is not a question anymore.

LOL, chill buddy. The doc didn’t mention that 7 and 8 are the same just different module systems, the doc says starting from v8 you drop CJS compatibility. Update your docs, answer less stupid questions after 😃

Gents, unfortunately I do not have the time to try and test every framework.

I do not mind you to create or contribute to issues here to solve integration challenges, and share recommendations, but in my opinion the issues you describe are not caused by music-metadata.

I offer both CJS (in version 7) and ESM support (in version 8) module at the moment, a time consuming compensation from my end for the poor backward compatibility and lack of ESM clearly taking over. Pick the one you need.

In the ESM module, parseFile() is only exported to Node, as it depends on Node specific API’s. Client (browser) side typically follows the non-node path:

That distinction is made here, and is my opinion perfectly valid: https://github.com/Borewit/music-metadata/blob/ab248fb040cff30401c12767b3819c17b71e6115/package.json#L14-L19

Regarding using music-metadata in Electron, after having almost the same discussion, see this post

Downgrading to version 7 solved it for me.