>PROBLEM
After installing MongoDB libs
npm i --save mongoose
npm install @types/mongoose --save-dev
-- used for MongoClient
npm install --save mongodb
npm install --save dotenv
Warning: Module not found: Error: Can't resolve
./node_modules/mongodb/lib/bson.js:12:9-28 - Warning: Module not found: Error: Can't resolve 'bson-ext' in 'M:\work\devcli_\javascript\jstopics\angularxLab\prj\node_modules\mongodb\lib'
./node_modules/mongodb/lib/deps.js:36:2-40 - Warning: Module not found: Error: Can't resolve 'kerberos' in 'M:\work\devcli_\javascript\jstopics\angularxLab\prj\node_modules\mongodb\lib'
./node_modules/mongodb/lib/deps.js:43:2-49 - Warning: Module not found: Error: Can't resolve '@mongodb-js/zstd' in 'M:\work\devcli_\javascript\jstopics\angularxLab\prj\node_modules\mongodb\lib'
./node_modules/mongodb/lib/deps.js:51:2-36 - Warning: Module not found: Error: Can't resolve 'snappy' in 'M:\work\devcli_\javascript\jstopics\angularxLab\prj\node_modules\mongodb\lib'
./node_modules/mongodb/lib/deps.js:54:75-105 - Warning: Module not found: Error: Can't resolve 'snappy/package.json' in 'M:\work\devcli_\javascript\jstopics\angularxLab\prj\node_modules\mongodb\lib'
./node_modules/mongodb/lib/utils.js:1399:32-87 - Warning: Critical dependency: the request of a dependency is an expression
./node_modules/mongodb/lib/utils.js:1407:32-68 - Warning: Module not found: Error: Can't resolve 'mongodb-client-encryption' in 'M:\work\devcli_\javascript\jstopics\angularxLab\prj\node_modules\mongodb\lib'
>SOLUTION
Sometimes, we are not sure if the environment is consistent or not.
The issue reported here was caused by the last lib installed (mongodb) in the app's env.
If you want to check this, you may skip steps and go straight to the fourth approach topic, at the end.
If you do want to recheck your app's env, you may start from the 1st approach.
First of all, stop the application, and close the IDE (VSCode/Eclipse, etc.).
1. APPROACH
- try:
npm cach verify
Retest.
2. APPROACH
If the 1st step didn't work, try to unistall the last libs installed.
In this case, it was the following:
npm uninstall mongoose
npm uninstall @types/mongoose
npm uninstall mongodb
npm uninstall dotenv
- do:
npm cach clean
or
npm cach clean --force
- reinstall them:
npm i --save mongoose
npm install @types/mongoose --save-dev
npm install --save mongodb
npm install --save dotenv
- do:
npm install
- restart the app.
3. APPROACH
If the 2nd step didn't work, remove all cache and node_modules, reinstalling the libs.
- alternatively install:
npm install node-gyp -g
- run:
npm cache clean --force
rm -Rf node_modules
npm install
npm cache verify
- restart the app.
4. APPROACH
If the 3rd step didn't work, probably it is some lib issue.
To discover the cause, the libs were tested one at a time.
To discover the cause, test the libs one at a time.
Making rollback, both libs were uninstalled.
The it was reinstalled mongoose and tested with minimal code.
Passed.
Then, it was installed MongoClient and tested with minimal code.
The issue returned.
To discover the cause, the code was commented and tested one statement at a time, restarting the app.
First:
import * as mongoDB from 'mongodb';
import * as dotenv from 'dotenv';
After, code was commented and the cause was this line:
const client = new mongoDB.MongoClient('mongodb://localhost:27017/test');
NOTE:
Sometimes it is necessary to repeat the procedure of cleaning, uninstalling, and installing until the application starts successfully (remember to stop the app and close the IDE):
npm cache clean --force
npm uninstal ... (all the libs to be uninstalled - rollback)
npm install
restart the app
5. APPROACH - Version Issue? Solving the mystery
After identifying the cause through the tests performed, it was possible to try another version to solve the mysterious incompatibility. So, the previous version was uninstalled and replace by another one, in this case a version already working fine in another demo application.
Current version to be replaced:
"mongoose": "^6.5.0",
Uninstalling:
npm uninstall mongoose --no-save
Replacing:
npm install --save mongoose@^5.8.3
Restarting application: success.
6. FINAL TIPS
The compiler for certain kinds of problems returns messages that are not very helpful.
If you stick on the error messages, you get stuck because they have nothing to do with the real cause.
Do not wait for a kind message telling necessarily the real issue behind the exception because it is not always possible.
Checking the result, you will not see something like that:
"Please, fix my mongoose version... blah, blah, blah'. :-) :-|
7. Rule of thumb
Having issues?
Think:
1. Is my environment healthy, stable, and consistent?
First, make sure of that.
2. Think about version conflict.
This is a complicated matter.
Too many libs, too many versions, lead to possible many conflicts.
>ENV
Angular CLI: 13.2.2
Node: 16.13.1
Package Manager: npm 8.5.4
OS: win32 x64