6

I have written my NodeJS JavaScript files with Import/Export syntax and my package.json has "type" : "module"

The problem is that after tsc builds the code, the transpiled code in /build/server.js cannot run. It says Exports is not defined in ES module scope

Here's my tsconfig.json

{
  "compilerOptions": {
    "resolveJsonModule": true,
    "incremental": true,
    "target": "es2019" ,
    "module": : "commonjs",
    "allowJs": true ,
    "outDir": "./build",
    "strict": true ,
    "noImplicitAny": false,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictBindCallApply": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true ,
    "alwaysStrict": true ,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true ,
    "inlineSourceMap": true ,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true ,
    "forceConsistentCasingInFileNames": true,
    "useUnknownInCatchVariables": false
  }
}

if I remove "module" : "commonjs" and add "moduleResolution": "Node", I get a different error with my imports:

Cannot find module /build/constants imported from /build/server.js The module /build/constants.js does exist, but in my code I'm not adding .js to my imports, so I'm importing it like this import {CONSTANTS} from 'constants'.

In a TypeScript file, when importing other TypeScript files, should the imports be like import {CONSTANTS} from constants.js or import {CONSTANTS} from constants.ts or import {CONSTANTS} from constants, which is what I have now.

I'm new to TypeScript. What's the best way to solve this problem I'm having?

Thanks

2 Answers 2

12

I found the solution. "type" : "module" had to be removed from package.json

Sign up to request clarification or add additional context in comments.

1 Comment

This doesn't fix the issue, it just hides it. You need "type": "module" for future ESM compatibility. I can't name the number of times TS has choked because I wasn't in this mode.
2

Updating tsconfig "module" and "target" to "ES6" solved the issue.

1 Comment

This solve the issue for importing the module and having exports defined, but then it breaks the dependency tree within the module.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.