Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

400
Visualizações
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 Respostas
Responde à pergunta

0

Intenta importar así

 import { isEmail } from "validator"
over 4 years ago · Santiago Trujillo Relatório

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 Relatório

0

Intenta importar como a continuación

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

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda