I want to understand why this code below doesn't compile when "module" is set to "esnext". Here is the config.
helpers/seeder.ts
import * as faker from "faker";
import { User } from "../interfaces/user";
let user: User = {
userName: faker.name.firstName(),
};
console.log(user);
Folder Structure
pages
components
helpers
|_run.ts
interfaces
|_user.d.ts
package.json
tsconfig.json
package.json
{
"name": "with-typescript",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"next": "11.1.2",
"react": "17.0.2",
"react-dom": "17.0.2", ....
},
"devDependencies": {
"@types/faker": "^5.5.8",
"@types/node": "^16.7.10",
"@types/react": "17.0.20",
"chai": "^4.3.4",
"esm": "^3.2.25",
"faker": "^5.5.3",
"typescript": "^4.4.2"
}
}
tsconfig.json
{
"compilerOptions": {
"target": "ES2021",
"module": "esnext",
"baseUrl": ".",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"strict": true,
"esModuleInterop": true,
"noImplicitAny": true,
"strictNullChecks": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"jsx": "preserve"
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
"**/[*].ts",
"**/[*].tsx",
],
"exclude": ["node_modules"]
}
Command from root
$ ts-node helpers/seeder.ts
Case
.tsconfig
.....
{
"module": "commonjs",
}
Clean exit
Case
.tsconfig
.....
{
"module": "esnext",
}
Error
import * as faker from "faker";
^^^^^^
SyntaxError: Cannot use import statement outside a module
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1031:15)
at Module._compile (node:internal/modules/cjs/loader:1065:27)
at Module.m._compile (/usr/local/lib/node_modules/ts-node/src/index.ts:1310:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Object.require.extensions.<computed> [as .ts] (/usr/local/lib/node_modules/ts-node/src/index.ts:1313:12)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)
at main (/usr/local/lib/node_modules/ts-node/src/bin.ts:331:12)
Tried
adding
"type": module
to package.json. Received Error:``` TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /root/helpers/run.ts at new NodeError (node:internal/errors:371:5) at Loader.defaultGetFormat [as _getFormat] (node:internal/modules/esm/get_format:71:15) at Loader.getFormat (node:internal/modules/esm/loader:105:42) at Loader.getModuleJob (node:internal/modules/esm/loader:243:31) at async Loader.import (node:internal/modules/esm/loader:177:17) at async Object.loadESM (node:internal/process/esm_loader:68:5) at async handleMainPromise (node:internal/modules/run_main:63:12) { code: 'ERR_UNKNOWN_FILE_EXTENSION' } ```
adding
"type": commonjs
to package.json. I prefer not to revert to commonjs regardless and keep everything es6 Received Error:SyntaxError: Cannot use import statement outside a module at Object.compileFunction (node:vm:352:18) at wrapSafe (node:internal/modules/cjs/loader:1031:15) at Module._compile (node:internal/modules/cjs/loader:1065:27) at Module.m._compile (/usr/local/lib/node_modules/ts-node/src/index.ts:1310:23) at Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Object.require.extensions.<computed> [as .ts] (/usr/local/lib/node_modules/ts- node/src/index.ts:1313:12) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12) at main (/usr/local/lib/node_modules/ts-node/src/bin.ts:331:12)