Al intentar implementar un módulo siguiendo el manual oficial , aparece este mensaje de error:
Error de referencia no detectado: las exportaciones no están definidas
en app.js: 2
Pero en ninguna parte de mi código utilizo el nombre exports
.
¿Cómo puedo arreglar esto?
Archivos
app.ts
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
módulo-1.t
export class Person {
constructor(){
console.log('Person Class');
}
}
export default Person;
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": true,
"outDir": "scripts/"
},
"exclude": [
"node_modules"
]
}
typescript
module
George C.
fuente
fuente
exports
con una s al final en lugar deexport
? Eso explicaría que el mensaje de error es incorrecto con s .Respuestas:
EDITAR:
Es posible que esta respuesta no funcione dependiendo de si ya no está apuntando
es5
, intentaré que la respuesta sea más completa.Respuesta original
Si CommonJS no está instalado (lo que define
exports
), debe eliminar esta línea de sutsconfig.json
:Según los comentarios, esto por sí solo puede no funcionar con versiones posteriores de
tsc
. Si ese es el caso, puede instalar un cargador de módulos como CommonJS, SystemJS o RequireJS y luego especificarlo.Nota:
Mire su
main.js
archivo quetsc
generó. Encontrarás esto en la parte superior:Es la raíz del mensaje de error y, después de eliminarlo
"module": "commonjs",
, desaparecerá.fuente
"module": "commonJs",
:(Pocas otras soluciones para este problema
fuente
npm install @babel/plugin-transform-modules-commonjs
y agregar a los complementos .babelrc resolvió mi pregunta.
fuente
mi solución es un resumen de todo lo anterior con pequeños trucos que agregué, básicamente agregué esto a mi código html
esto incluso le permite usarlo en
import
lugar derequire
si está usando electron o algo, y funciona bien con mecanografiado 3.5.1, target: es3 -> esnext.fuente
app.js:3 Uncaught ReferenceError: require is not defined
Resolví el problema eliminando el
"type": "module"
campo depackage.json
.fuente
Tuve el mismo problema y lo resolví agregando la biblioteca " es5 " a tsconfig.json así:
fuente
Para las personas que aún tienen este problema, si el objetivo del compilador está configurado en ES6, debe indicarle a babel que omita la transformación del módulo. Para hacerlo, agregue esto a su
.babelrc
archivofuente
<script>
etiqueta. Esperaba usar el módulo junto con el código anterior y parece que eso no es posible. Esto al menos me permite usar ES6 y luego ocuparme de la exportación.plugins
opción. Echa un vistazo a babeljs.io/docs/plugins/#modulesEsto se soluciona configurando la
module
opción del compilador enes6
:fuente
También tuve este mismo error. En mi caso, fue porque teníamos una declaración de importación pasada de moda en nuestro proyecto TypeScript AngularJS como este:
que se compiló en JavaScript así:
Esto era necesario en los viejos tiempos porque luego lo usamos
IAttributes
en el código y TypeScript no habría sabido qué hacer con él de otra manera. Pero después de eliminar la declaración de importación y convertirIAttributes
ang.IAttributes
esas dos líneas de JavaScript desapareció, al igual que el mensaje de error.fuente
Simplemente agregue
libraryTarget: 'umd'
, asífuente
para mí, eliminar
"esModuleInterop": true
de tsconfig.json funcionó.fuente
Para algunos proyectos ASP.NET
import
y esexport
posible que no se utilice en absoluto en sus Typescripts.El error de la pregunta apareció cuando intenté hacerlo y solo descubrí más tarde que solo necesitaba agregar el script JS generado a la Vista así:
fuente
Prueba lo que @iFreilicht sugirió anteriormente. Si eso no funcionó después de haber instalado el paquete web y todo, es posible que haya copiado una configuración de paquete web desde algún lugar en línea y haya configurado allí que desea que la salida sea compatible con CommonJS por error. Asegúrese de que este no sea el caso en
webpack.config.js
:fuente
Tuve el mismo problema y lo solucionó cambiando el orden de carga de los paquetes JS.
Compruebe el orden en el que se llaman los paquetes que necesita y cárguelos en el orden adecuado.
En mi caso específico (sin usar el paquete de módulos) necesitaba cargar
Redux
, luegoRedux Thunk
, entoncesReact Redux
. CargarReact Redux
antesRedux Thunk
me daríaexports is not defined
.fuente
Nota: Es posible que esto no sea aplicable para la respuesta de OP, pero recibí este error y así fue como lo resolví.
Entonces, el problema al que me enfrentaba era que recibía este error cuando recuperaba una biblioteca 'js' de un CDN en particular.
Lo único incorrecto que estaba haciendo era importar desde el
cjs
directorio de CDN así:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/cjs/popper.min.js
¿Notas la
dist/cjs
pieza? Ahí es donde estaba el problema.Volví al CDN (jsdelivr) en mi caso y navegué para encontrar la
umd
carpeta. Y pude encontrar otro conjunto depopper.min.js
lo que era el archivo correcto a importar:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js
.fuente
fuente
Tuve el mismo problema, pero mi configuración requería una solución diferente.
Estoy usando el
create-react-app-rewired
paquete con unconfig-overrides.js
archivo. Anteriormente, estaba usando laaddBabelPresets
importación (en eloverride()
método) decustomize-cra
y decidí abstraer esos ajustes preestablecidos en un archivo separado. Casualmente, esto resolvió mi problema.Agregué
useBabelRc()
aloverride()
métodoconfig-overrides.js
y creé unbabel.config.js
archivo con lo siguiente:fuente