Búsqueda de sitios web

typescript - ¿Cómo solucionar SyntaxError: Cannot use import statement outside a module?


Soy nuevo en todo esto, y estoy tratando de agregar un backend de Node + TypeScript a mi proyecto de Angular. Pero después de importar express, siempre obtengo el error.

[ERROR] SyntaxError: Cannot use import statement outside a module.

package.json

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "serve": "ts-node-dev server.ts",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/express": "^4.17.11",
    "express": "^4.17.1",
    "ts-node": "^9.1.1",
    "ts-node-dev": "^1.1.6",
    "tslint": "^6.1.3",
    "typescript": "^4.2.4"
  },
}

tsconfig.json

{
  "compilerOptions": {
    "target": "ESNEXT",                                
    "module": "commonjs", 
    "strict": false, 
    "esModuleInterop": true, 
    "skipLibCheck": true,                          
    "forceConsistentCasingInFileNames": true        
  }
}   

servidor.ts

import * as express from 'express';

const app = express();

app.listen(4201, '127.0.0.', function() {
  console.log('Server is listening on port 4201');
});

He investigado esto y la solución más común era agregar "type": "module" a package.json, lo cual hice. También sé que esto funciona solo a partir de Node 13 en adelante, y tengo Node: 14.15.5.

Respuesta #1

La mejor práctica para importar los módulos de node es usando require(). Puedes importar módulos integrados del núcleo de node, módulos de npm así como módulos locales usando la función require(). En tu caso, usa const express=require( "express" ) en lugar de import * as express from 'express' y elimina "type":"module" de tu package.json. Déjame saber si esto funciona para ti.

Artículos relacionados