validator.js icon indicating copy to clipboard operation
validator.js copied to clipboard

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

Open OneComputerGuy opened this issue 1 year ago • 4 comments

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

OneComputerGuy avatar Apr 01 '24 16:04 OneComputerGuy

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.

pajasevi avatar Apr 20 '24 23:04 pajasevi

@pajasevi how to use the default export?

simPod avatar Jul 26 '24 08:07 simPod

Did you get a resolution to this?

U-4-E-A avatar Aug 10 '24 20:08 U-4-E-A

@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.

QuantumQuin avatar Aug 21 '24 22:08 QuantumQuin