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.

Relaterte artikler