Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

402
Views
SyntaxError: no se puede usar la declaración de importación fuera de un módulo (de la dependencia)

¿Cómo resuelve "No se puede usar la declaración de importación fuera de un módulo" de una dependencia cuando la dependencia no se declara como un módulo?


Quiero usar el validador en Svelte/kit para validar correos electrónicos. Sin embargo, al importar la versión de ESM, aparece el error "No se puede usar la declaración de importación fuera de un módulo". Estoy usando pnpm en lugar de npm o yarn.

 import isEmail from 'validator/es/lib/isEmail'
 /node_modules/.pnpm/validator@13.6.0/node_modules/validator/es/lib/isEmail.js:1 import assertString from './util/assertString'; ^^^^^^ SyntaxError: Cannot use import statement outside a module at Object.compileFunction (node:vm:355:18) at wrapSafe (node:internal/modules/cjs/loader:1039:15) at Module._compile (node:internal/modules/cjs/loader:1073:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10) at Module.load (node:internal/modules/cjs/loader:989:32) at Function.Module._load (node:internal/modules/cjs/loader:829:14) at Module.require (node:internal/modules/cjs/loader:1013:19) at require (node:internal/modules/cjs/helpers:93:18) at nodeRequire

Parece que el validador está intentando usar la declaración de importación, pero es package.json no especifica "type": "module" . Supongo que esta es la causa raíz del error.

Pasos de depuración

  • paquete.json tiene "type": "module"
  • Actualizado a la última versión del nodo
  • Intenté usar la versión no esm del validador 'validator/lib/isEmail' , pero eso provoca otros errores no relacionados con este hilo.

Relacionados

  • SyntaxError: no se puede usar la declaración de importación fuera de un módulo : esta solución es para el código que controla, no para las dependencias
  • "Error de sintaxis no detectado: no se puede usar la declaración de importación fuera de un módulo" al importar ECMAScript 6 : parece ser muy similar, pero recibo este error en el nodo, no en el navegador

Metadatos

  • Nodo: v16.2.0
  • Sveltekit: v1.0.0-next.115
  • Validador: 13.6.0
over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

Intenta importar así

 import { isEmail } from "validator"
over 4 years ago · Santiago Trujillo Report

0

Sin más información, si su problema radica únicamente en un problema con el código del que depende, considere usar a corto plazo algo como un paquete de parches para hacer los ajustes necesarios y, a largo plazo, ¡abra un PR en el repositorio de validator.js !

para el paquete de parches, simplemente agregue el "type": "module" al paquete.json en node_modules/validator , y luego ejecute npx patch-package validator . Luego puede controlar la versión del archivo diff generado, y los cambios se realizan automáticamente con ganchos npm, suponiendo que el paquete de parches es una dependencia (de desarrollo).

El comportamiento o defecto de la biblioteca aquí es probablemente de los desarrolladores, más teniendo en cuenta cosas como el paquete web que importa ESM en sus propios términos, y no con los patrones de resolución del módulo de nodo que parece que está usando Svelte. o al menos cómo el problema ha llegado tan lejos (¡podría estar equivocado al respecto!).

over 4 years ago · Santiago Trujillo Report

0

Intenta importar como a continuación

 const {isEmail} = require('validator');
over 4 years ago · Santiago Trujillo Report

0

¿Has probado a importar así?

 import validator from 'validator'

Intenté reproducir tu problema con el último SvelteKit. Esto funciona bien:

 // index.svelte <script> import validator from 'validator'; let result = validator.isEmail('foo@bar.com'); console.log(result); </script>

Cuando cambié la declaración de importación a:

 import validator from 'validator/es/lib/isEmail'

Recibí el error de su pregunta (No se puede usar la declaración de importación fuera de un módulo).

Importar validator/es/lib/isEmail supuestamente solo importa un subconjunto de la biblioteca. No estoy seguro de cuánta diferencia hará; puede que no haga ninguna diferencia. Una compilación un poco más grande supera a una compilación que no funciona. Sugiero que funcione primero, luego optimice el tamaño de construcción si realmente lo necesita.

over 4 years ago · Santiago Trujillo Report

0

Después de leer sus documentos: https://github.com/validatorjs/validator.js#es6 , parece que la parte es en la importación, por lo que puede ser modificable. Puede corregir este error, simplemente importándolo normalmente:

 import isURL from 'validator/lib/isURL';
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!