Import mapping is a new feature in Javascript that allows usage of absolute paths rather than relative paths, making restructuring projects easier.
According to the docs, I have to put a imports object
to the package.json.
Here is a example file that has this imports:
{
"dependencies": {
"dotenv": "^16.0.3",
"express": "^4.18.2"
},
"imports": {
"#stuff": {
"app": "./app.js"
}
},
"type": "module"
}
and a example minimal snippet of code that tries to use app.js by import mapping
import { app } from "#stuff/app"
If I run the server with the code and the log:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
node:internal/errors:478
ErrorCaptureStackTrace(err);
^
TypeError [ERR_PACKAGE_IMPORT_NOT_DEFINED]: Package import specifier "#stuff/app" is not defined in package /home//Desktop//package.json imported from /home//Desktop//server.js
at new NodeError (node:internal/errors:387:5)
at throwImportNotDefined (node:internal/modules/esm/resolve:354:9)
at packageImportsResolve (node:internal/modules/esm/resolve:737:3)
at moduleResolve (node:internal/modules/esm/resolve:895:21)
at defaultResolve (node:internal/modules/esm/resolve:1115:11)
at nextResolve (node:internal/modules/esm/loader:163:28)
at ESMLoader.resolve (node:internal/modules/esm/loader:837:30)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
at link (node:internal/modules/esm/module_job:75:36) {
code: 'ERR_PACKAGE_IMPORT_NOT_DEFINED'
}
[nodemon] app crashed - waiting for file changes before starting...
Side note: app.js actually does exists but I don’t include here due it contains my own private code.