Mencoba menerapkan modul mengikuti buku pegangan resmi , saya mendapatkan pesan kesalahan ini:
ReferenceError Tidak Tertangkap: ekspor tidak ditentukan
di app.js: 2
Tapi tidak ada dalam kode saya yang pernah menggunakan nama itu exports
.
Bagaimana cara memperbaikinya?
File
app.ts
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
modul-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.
sumber
sumber
exports
dengan s di akhir, bukanexport
? Itu akan menjelaskan pesan kesalahan karena dengan s salah.Jawaban:
EDIT:
Jawaban ini mungkin tidak berfungsi tergantung jika Anda tidak menargetkan
es5
lagi, saya akan mencoba membuat jawaban lebih lengkap.Jawaban Asli
Jika CommonJS tidak diinstal ( yang mendefinisikan
exports
), Anda harus menghapus baris ini daritsconfig.json
:Sesuai dengan komentar, ini saja mungkin tidak berfungsi dengan versi yang lebih baru
tsc
. Jika demikian, Anda dapat menginstal modul loader seperti CommonJS, SystemJS atau RequireJS dan kemudian menentukannya.catatan:
Lihat
main.js
file Anda yangtsc
dihasilkan. Anda akan menemukan ini di bagian paling atas:Ini adalah akar dari pesan kesalahan, dan setelah dihapus
"module": "commonjs",
, pesan itu akan hilang.sumber
"module": "commonJs",
:(Beberapa Solusi lain untuk masalah ini
sumber
npm install @babel/plugin-transform-modules-commonjs
dan tambahkan ke plugin .babelrc menyelesaikan pertanyaan saya.
sumber
solusi saya adalah ringkasan dari semua di atas dengan sedikit trik yang saya tambahkan, pada dasarnya saya menambahkan ini ke kode html saya
ini bahkan memungkinkan Anda untuk menggunakan
import
alih-alihrequire
jika Anda menggunakan electron atau sesuatu, dan itu bekerja dengan baik dengan skrip 3.5.1, target: es3 -> esnext.sumber
app.js:3 Uncaught ReferenceError: require is not defined
Saya memecahkan masalah dengan menghapus
"type": "module"
bidang daripackage.json
.sumber
Saya memiliki masalah yang sama dan menyelesaikannya dengan menambahkan pustaka " es5 " ke tsconfig.json seperti ini:
sumber
Bagi orang-orang yang masih mengalami masalah ini, jika target kompilator Anda disetel ke ES6, Anda perlu memberi tahu babel untuk melewati transformasi modul. Untuk melakukannya, tambahkan ini ke
.babelrc
file Andasumber
<script>
tag. Saya berharap untuk menggunakan modul bersama dengan kode yang lebih lama dan sepertinya itu tidak mungkin. Ini setidaknya memungkinkan saya untuk menggunakan ES6 dan biarkan saya menangani ekspor nanti.plugins
opsi. Lihat babeljs.io/docs/plugins/#modulesIni diperbaiki dengan mengatur
module
opsi kompiler kees6
:sumber
Saya mengalami kesalahan yang sama juga. Dalam kasus saya, itu karena kami memiliki pernyataan impor kuno dalam proyek TypeScript AngularJS seperti ini:
yang dikompilasi ke JavaScript seperti ini:
Ini diperlukan kembali di masa lalu karena kami kemudian menggunakan
IAttributes
kode dan TypeScript tidak akan tahu apa yang harus dilakukan dengannya. Tetapi setelah menghapus pernyataan import, dan mengonversinyaIAttributes
keng.IAttributes
dua baris JavaScript tersebut menghilang - dan begitu pula pesan kesalahannya.sumber
Cukup tambahkan
libraryTarget: 'umd'
, seperti itusumber
bagi saya, menghapus
"esModuleInterop": true
dari tsconfig.json melakukan triknya.sumber
Untuk beberapa proyek ASP.NET
import
danexport
mungkin tidak digunakan sama sekali di Skrip Ketik Anda.Kesalahan pertanyaan muncul ketika saya mencoba melakukannya dan saya baru menemukan kemudian bahwa saya hanya perlu menambahkan skrip JS yang dihasilkan ke Tampilan seperti:
sumber
Coba saran @iFreilicht di atas. Jika itu tidak berhasil setelah Anda menginstal webpack dan sebagainya, Anda mungkin baru saja menyalin konfigurasi webpack dari suatu tempat secara online dan mengonfigurasi di sana sehingga Anda ingin output mendukung CommonJS secara tidak sengaja. Pastikan ini tidak terjadi di
webpack.config.js
:sumber
Memiliki masalah yang sama dan memperbaikinya dengan mengubah urutan pemuatan paket JS.
Periksa urutan pemanggilan paket yang Anda butuhkan dan muat dalam urutan yang sesuai.
Dalam kasus tertentu (tidak menggunakan modul bundler) yang saya butuhkan untuk beban
Redux
, kemudianRedux Thunk
, kemudianReact Redux
. MemuatReact Redux
sebelumnyaRedux Thunk
akan memberi sayaexports is not defined
.sumber
Catatan: Ini mungkin tidak berlaku untuk jawaban OP, tetapi saya mendapatkan kesalahan ini, dan ini cara saya mengatasinya.
Jadi masalah yang saya hadapi adalah bahwa saya mendapatkan kesalahan ini ketika saya mengambil pustaka 'js' dari CDN tertentu.
Satu-satunya hal yang salah yang saya lakukan adalah mengimpor dari
cjs
direktori CDN seperti ini:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/cjs/popper.min.js
Perhatikan
dist/cjs
bagiannya? Di situlah masalahnya.Saya kembali ke CDN (jsdelivr) dalam kasus saya dan menavigasi untuk menemukan
umd
folder tersebut. Dan aku bisa menemukan satu setpopper.min.js
yang merupakan file yang benar untuk impor:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js
.sumber
sumber
Saya memiliki masalah yang sama, tetapi penyiapan saya membutuhkan solusi yang berbeda.
Saya menggunakan
create-react-app-rewired
paket denganconfig-overrides.js
file. Sebelumnya, saya menggunakanaddBabelPresets
import (dalamoverride()
metode) daricustomize-cra
dan memutuskan untuk mengabstraksi preset tersebut ke file terpisah. Secara kebetulan, ini memecahkan masalah saya.Saya menambahkan
useBabelRc()
keoverride()
metodeconfig-overrides.js
dan membuatbabel.config.js
file dengan yang berikut ini:sumber