validatorjs / validator.js

String validation
MIT License
23.12k stars 2.31k forks source link

"Cannot find module" error for lib or es/lib modules #2387

Open OneComputerGuy opened 7 months ago

OneComputerGuy commented 7 months ago

Issue:

When importing either a subset of libraries or the tree-shakeable library for any validator using ES6 modules, a NodeJS ES6 error is shown indicating that the module cannot be found

Examples

image

This is the package.json file:

{
  "name": "testines6",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "module",
  "dependencies": {
    "validator": "^13.11.0"
  }
}

And the file calling the library (index.js):

import isAlpha from "validator/es/lib/isAlpha";

const check = (input) => isAlpha(input);

check('blablabla');

This has been reported here: https://github.com/validatorjs/validator.js/issues/1759#issuecomment-1836543783 but using either option (lib or es/lib) shows the same error.

The only path going forwards seems to be importing the entire library and using the function from there which creates a bundle file with unnecessary information

EDIT:

To isolate the issue, ran the same setup on a brand new Google Cloud VM using the same NodeJS and validator version. Ran into the same issue for both es/lib and /lib imports but it works importing the entire library

image

Additional context Validator.js version: 13.11.0 Node.js version: 20.10.0 OS platform: macOs

pajasevi commented 6 months ago

The issue is that this library isn't really ESM compliant because package.json does not have the exports field which would export all of these modules and thus standard ES module import won't work without a bundler that would try to fix that.

So until that is fixed, only was to import via ESM is to use the default export.

simPod commented 3 months ago

@pajasevi how to use the default export?

U-4-E-A commented 3 months ago

Did you get a resolution to this?

QuantumQuin commented 2 months ago

@pajasevi This information should be added to the readme, as it's not documented that it doesn't work without a bundler. The examples just state "ES6," but only one of the three examples given works without a bundler, and this caveat is not mentioned elsewhere.