En essayant d'implémenter un module en suivant le manuel officiel , j'obtiens ce message d'erreur:
Uncaught ReferenceError: les exportations ne sont pas définies
sur app.js: 2
Mais nulle part dans mon code je n'utilise le nom exports
.
Comment puis-je réparer cela?
Des dossiers
app.ts
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
module-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.
la source
la source
exports
avec un s à la fin au lieu deexport
? Cela expliquerait le message d'erreur car avec s est faux.Réponses:
ÉDITER:
Cette réponse peut ne pas fonctionner selon que vous ne ciblez
es5
plus, je vais essayer de rendre la réponse plus complète.Réponse originale
Si CommonJS n'est pas installé ( qui définit
exports
), vous devez supprimer cette ligne de votretsconfig.json
:Selon les commentaires, cela seul peut ne pas fonctionner avec les versions ultérieures de
tsc
. Si tel est le cas, vous pouvez installer un chargeur de module comme CommonJS, SystemJS ou RequireJS, puis le spécifier.Remarque:
Regardez votre
main.js
fichier qui atsc
généré. Vous trouverez ceci tout en haut:C'est la racine du message d'erreur, et après la suppression
"module": "commonjs",
, il disparaîtra.la source
"module": "commonJs",
:(Peu d'autres solutions pour ce problème
la source
npm install @babel/plugin-transform-modules-commonjs
et ajouter aux plugins .babelrc a résolu ma question.
la source
J'ai résolu le problème en supprimant le
"type": "module"
champ depackage.json
.la source
ma solution est un résumé de tout ce qui précède avec de petites astuces que j'ai ajoutées, en gros j'ai ajouté ceci à mon code html
cela vous permet même d'utiliser à la
import
place derequire
si vous utilisez électron ou quelque chose du genre, et cela fonctionne très bien avec typescript 3.5.1, target: es3 -> esnext.la source
app.js:3 Uncaught ReferenceError: require is not defined
J'ai eu le même problème et je l'ai résolu en ajoutant la bibliothèque " es5 " à tsconfig.json comme ceci:
la source
Pour les personnes ayant encore ce problème, si votre cible de compilateur est définie sur ES6, vous devez dire à babel d'ignorer la transformation du module. Pour ce faire, ajoutez ceci à votre
.babelrc
fichierla source
<script>
balise. J'espérais utiliser le module avec un code plus ancien et il semble que ce ne soit pas possible. Cela me permet au moins d'utiliser ES6 et de m'occuper de l'exportation plus tard.plugins
option. Découvrez babeljs.io/docs/plugins/#modulesCe problème est résolu en définissant l'
module
option du compilateur sures6
:la source
J'ai eu cette même erreur aussi. Dans mon cas, c'était parce que nous avions une instruction d'importation à l'ancienne dans notre projet TypeScript AngularJS comme celle-ci:
qui a été compilé en JavaScript comme ceci:
Cela était nécessaire à l'époque car nous utilisions ensuite
IAttributes
dans le code et TypeScript n'aurait pas su quoi en faire autrement. Mais après la suppression de l'instruction d'importation et la conversionIAttributes
versng.IAttributes
ces deux lignes JavaScript, le message d'erreur a disparu.la source
Ajoutez simplement
libraryTarget: 'umd'
, comme çala source
pour moi, la suppression
"esModuleInterop": true
de tsconfig.json a fait l'affaire.la source
Pour certains projets ASP.NET
import
etexport
peut ne pas être utilisé du tout dans vos typescripts.L'erreur de la question est apparue lorsque j'ai tenté de le faire et je n'ai découvert que plus tard que j'avais juste besoin d'ajouter le script JS généré à la vue comme ceci:
la source
Essayez ce que @iFreilicht a suggéré ci-dessus. Si cela ne fonctionnait pas après avoir installé webpack et tout, vous venez peut-être de copier une configuration Webpack à partir d'un endroit en ligne et de configurer là-bas que vous voulez que la sortie prenne en charge CommonJS par erreur. Assurez-vous que ce n'est pas le cas dans
webpack.config.js
:la source
J'ai eu le même problème et l'a corrigé en modifiant l'ordre de chargement des packages JS.
Vérifiez l'ordre dans lequel les packages dont vous avez besoin sont appelés et chargez-les dans un ordre approprié.
Dans mon cas particulier (sans utiliser le module bundler), je devais charger
Redux
, alorsRedux Thunk
, alorsReact Redux
. Le chargementReact Redux
avantRedux Thunk
me donneraitexports is not defined
.la source
Remarque: Cela ne s'applique peut-être pas à la réponse d'OP, mais j'obtenais cette erreur, et c'est ainsi que je l'ai résolue.
Donc, le problème auquel je faisais face était que j'obtenais cette erreur lorsque j'ai récupéré une bibliothèque 'js' à partir d'un CDN particulier.
La seule mauvaise chose que je faisais était d'importer depuis le
cjs
répertoire du CDN comme ceci:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/cjs/popper.min.js
Remarquez la
dist/cjs
pièce? C'est là que se trouvait le problème.Je suis retourné au CDN (jsdelivr) dans mon cas et j'ai navigué pour trouver le
umd
dossier. Et je pouvais trouver un autre ensemble de cepopper.min.js
qui était le bon fichier à importer:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js
.la source
la source
J'ai eu le même problème, mais ma configuration nécessitait une solution différente.
J'utilise le
create-react-app-rewired
package avec unconfig-overrides.js
fichier. Auparavant, j'utilisais l'addBabelPresets
importation (dans laoverride()
méthode) decustomize-cra
et décidé de résumer ces préréglages dans un fichier séparé. Par coïncidence, cela a résolu mon problème.J'ai ajouté
useBabelRc()
à laoverride()
méthodeconfig-overrides.js
et créé unbabel.config.js
fichier avec les éléments suivants:la source