node.js - Den nåværende filen er en commonjs-modul hvis importer vil produsere require
Jeg har skrevet litt logikk i appen min og 20 filer, og så vil jeg bruke en validator og lastet ned denne biblioteket via yarn
yarn add @vinejs/vine
Nå vil jeg legge det til, og jeg fikk denne feilen:
The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import("@vinejs/vine")' call instead.
To convert this file to an ECMAScript module, change its file extension to '.mts', or add the field `"type": "module"` to 'c:/Users/xxxx/Desktop/xxx/backend/package.json'.ts(1479)
Okei, så jeg skrev i package.json type "module", det fungerer, men nå må jeg endre alle mappene mine til .js-utvidelsen, og hvis jeg gjør det, får jeg en feil i server.ts slik som dette:
Error: Must use import to load ES Module: C:\Users\rambo\Desktop\psm-solution\backend\src\server.ts
Så jeg fjernet all logikken min og feilen «Must use import to load ES Module» eksisterer fortsatt. Men jeg bruker import. Hva gjør jeg galt?
package.json
{
"name": "app",
"version": "1.0.0",
"description": "",
"main": "server.ts",
"scripts": {
"start": "ts-node-dev ./src/server.ts --watch",
"start:prod": "yarn run build && node ./dist/src/server.js",
"build": "rimraf ./build && tsc"
},
"keywords": [],
"type": "module",
"author": "",
"license": "ISC",
....
ts.config
{
"compilerOptions": {
"lib": [
"ESNext" /* ESNext includes new Level-4 features that were
recently added to the ECMA-262 JS spec */
],
"module": "NodeNext",/* (1 of 2) TS v4.7 settings you need
to change */
"moduleResolution": "NodeNext", /* This is the one that will
specifically solve the error you're
getting. Without the internal changes
made by this, your project will not
resolve modules correctly. */
"esModuleInterop": true, /* This is properly configured. FYI you cannot
change this, it must be set to true. */
/*
THE REST OF THE SETTINGS DO NOT AFFECT THE MODULE TYPE OR HOW TSC
RESOLVES OTHER MODULES */
"allowJs": true,
"target": "ES2021",
"rootDir": "src",
"outDir": "build",
"forceConsistentCasingInFileNames": true
},
"include": [
"src/**/*"
]
}
server.ts
import * as Sentry from '@sentry/node';
import express from 'express';
import { ProfilingIntegration } from '@sentry/profiling-node';
import helmet from 'helmet';
import { errorHandler } from './middleware/errorHandler.js';
import { rateLimiter } from './rateLimit/rateLimit.js';
import { createClient } from '@supabase/supabase-js';
import { Database } from './config/database.types.js';
import { router_auth } from './routes/auth/auth.js';
import { verifyJWT } from './middleware/verifyJWT.js';
const app = express();
app.listen(3000, () => {
console.log('SERVER LISTEN ON PORT 3000');
});
Jeg håper du kan hjelpe meg med å løse dette problemet ovenfor hvor han sa "Den nåværende filen er en CommonJS-modul hvis importer vil produsere 'require'-kall..."
Svar #1
{
"module": "esnext",
"moduleResolution": "bundler",
}
Du kan prøve disse verdiene for module og moduleResolution i tsconfig.json-filen din. Denne konfigurasjonen fungerte for meg i en lignende situasjon.
