Very similar to this question, but not a duplicate IMHO when using node
:
$ tree .
.
├── src
│ ├── main.ts
│ └── utils
│ └── myUtils.ts
└── tsconfig.json
I'm trying to use a @
import like so:
$ cat src/main.ts
import { myLovelyUtilsFunction } from "@folder1/myUtils"
const y = myLovelyUtilsFunction();
console.log(`>>> ${y}`);
My tsconfig.json
looks right, mapping @folder1
where it should:
{
"compilerOptions": {
"baseUrl": "src",
"paths": { "@folder1/*": ["utils/*"] },
"module": "commonjs"
}
}
Transpilation goes fine, but running node
doesn't:
$ npx tsc -p tsconfig.json # <--- no errors
$ node src/main.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module '@folder1/myUtils'
Require stack:
< ... omitted ... >
I think you need tsconfig-paths
or ts-node
to get your module resolution work properly.
Modify your tsconfig.json
{
"compilerOptions": {
"baseUrl": "./",
"paths": { "@folder1/*": ["src/utils/*"] },
"module": "commonjs"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
You also need to create an entry file point, which will use tsconfig-paths to resolve the paths.
index.ts
import 'tsconfig-paths/register';
import './src/main';
Update your package.json
and then run to test.
{
"scripts": {
"start": "node index.js"
}
}
The structure of your project could look like this now
.
├── src/
│ ├── main.ts
│ ├── utils/
│ │ └── myUtils.ts
├── tsconfig.json
├── package.json
├── index.ts