Próbując wdrożyć moduł zgodnie z oficjalnym podręcznikiem , otrzymuję następujący komunikat o błędzie:
Uncaught ReferenceError: nie zdefiniowano eksportu
w app.js: 2
Ale nigdzie w moim kodzie nie używam tego imienia exports
.
Jak mogę to naprawić?
Pliki
app.ts
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
moduł-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.
źródło
źródło
exports
z S na końcu zamiastexport
? To wyjaśniałoby komunikat o błędzie, ponieważ w przypadku s jest błędne.Odpowiedzi:
EDYTOWAĆ:
Ta odpowiedź może nie działać, w zależności od tego, czy nie jesteś
es5
już celem , postaram się uzupełnić odpowiedź.Oryginalna odpowiedź
Jeśli CommonJS nie jest zainstalowany ( co definiuje
exports
), musisz usunąć ten wiersz ztsconfig.json
:Zgodnie z komentarzami, to samo może nie działać z późniejszymi wersjami
tsc
. W takim przypadku można zainstalować moduł ładujący, taki jak CommonJS, SystemJS lub RequireJS, a następnie to określić.Uwaga:
Spójrz na wygenerowany
main.js
pliktsc
. Znajdziesz to na samej górze:Jest to źródło komunikatu o błędzie i po usunięciu
"module": "commonjs",
zniknie.źródło
"module": "commonJs",
:(Kilka innych rozwiązań tego problemu
źródło
npm install @babel/plugin-transform-modules-commonjs
i dodanie do .babelrc wtyczek rozwiązało moje pytanie.
źródło
Rozwiązałem problem, usuwając
"type": "module"
pole zpackage.json
.źródło
moje rozwiązanie jest podsumowaniem wszystkiego powyżej z małymi sztuczkami, które dodałem, w zasadzie dodałem to do mojego kodu HTML
pozwala to nawet na użycie
import
zamiast,require
jeśli używasz elektronu lub czegoś podobnego, i działa dobrze z maszynopisem 3.5.1, target: es3 -> esnext.źródło
app.js:3 Uncaught ReferenceError: require is not defined
Miałem ten sam problem i rozwiązałem go dodając bibliotekę " es5 " do tsconfig.json w następujący sposób:
źródło
Dla osób, które nadal mają ten problem, jeśli docelowy kompilator jest ustawiony na ES6, musisz powiedzieć babelowi, aby pominął transformację modułu. Aby to zrobić, dodaj to do swojego
.babelrc
plikuźródło
<script>
tagiem. Miałem nadzieję, że użyję modułu razem ze starszym kodem i wygląda na to, że nie jest to możliwe. To przynajmniej pozwala mi używać ES6 i zajmę się później eksportem.plugins
opcji. Sprawdź babeljs.io/docs/plugins/#modulesMożna to naprawić, ustawiając
module
opcję kompilatora naes6
:źródło
Miałem też ten sam błąd. W moim przypadku było tak, ponieważ mieliśmy staromodną instrukcję importu w naszym projekcie TypeScript AngularJS w następujący sposób:
który został skompilowany do JavaScript w następujący sposób:
Było to potrzebne w dawnych czasach, ponieważ używaliśmy wtedy
IAttributes
kodu, a TypeScript nie wiedziałby, co z tym zrobić w inny sposób. Ale po usunięciu instrukcji importu i konwersjiIAttributes
dong.IAttributes
tych dwóch wierszy JavaScript zniknął - podobnie jak komunikat o błędzie.źródło
Po prostu dodaj
libraryTarget: 'umd'
, takźródło
dla mnie, usunięcie
"esModuleInterop": true
z tsconfig.json załatwiło sprawę.źródło
W przypadku niektórych projektów ASP.NET
import
iexport
może nie być w ogóle używany w skryptach Typescripts.Błąd pytania pojawił się, gdy próbowałem to zrobić i dopiero później odkryłem, że muszę tylko dodać wygenerowany skrypt JS do widoku w następujący sposób:
źródło
Wypróbuj to, co @iFreilicht zasugerował powyżej. Jeśli to nie zadziałało po zainstalowaniu pakietu webpacka i wszystkiego innego, być może właśnie skopiowałeś konfigurację pakietu internetowego z innego miejsca online i skonfigurowałeś tam, że chcesz, aby dane wyjściowe przez pomyłkę obsługiwały CommonJS. Upewnij się, że tak nie jest w przypadku
webpack.config.js
:źródło
Miałem ten sam problem i naprawiłem go, zmieniając kolejność ładowania pakietów JS.
Sprawdź kolejność wywoływania potrzebnych pakietów i załaduj je w odpowiedniej kolejności.
W moim konkretnym przypadku (nie używając modułu Bundler) I potrzebne do obciążenia
Redux
, a następnieRedux Thunk
, po czymReact Redux
. ŁadowanieReact Redux
wcześniejRedux Thunk
dałoby miexports is not defined
.źródło
Uwaga: to może nie mieć zastosowania do odpowiedzi OP, ale otrzymywałem ten błąd i tak go rozwiązałem.
Tak więc problem, z którym się zmagałem, polegał na tym, że otrzymywałem ten błąd podczas pobierania biblioteki „js” z określonej sieci CDN.
Jedyną złą rzeczą, jaką robiłem, było importowanie z katalogu CDN w następujący
cjs
sposób:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/cjs/popper.min.js
Zwróć uwagę na
dist/cjs
część? Tam był problem.Wróciłem do CDN (jsdelivr) w moim przypadku i przeszedłem, aby znaleźć
umd
folder. I udało mi się znaleźć innego zestawupopper.min.js
, który był poprawny plik do importu:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js
.źródło
źródło
Miałem ten sam problem, ale moja konfiguracja wymagała innego rozwiązania.
Używam
create-react-app-rewired
pakietu zconfig-overrides.js
plikiem. Wcześniej korzystałem zaddBabelPresets
importu (woverride()
metodzie) zcustomize-cra
i postanowiłem wyodrębnić te presety do oddzielnego pliku. Przypadkowo rozwiązało to mój problem.Dodałem
useBabelRc()
dooverride()
metody wconfig-overrides.js
i utworzyłembabel.config.js
plik z następującymi elementami:źródło