Попытка реализовать модуль по официальному справочнику , я получаю следующее сообщение об ошибке:
Uncaught ReferenceError: экспорт не определен
в app.js: 2
Но нигде в моем коде я никогда не использую имя exports
.
Как я могу это исправить?
Файлы
app.ts
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
модуль-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
Джордж К.
источник
источник
exports
с буквой s в конце вместоexport
? Это объяснило бы сообщение об ошибке, поскольку с s неверно.Ответы:
РЕДАКТИРОВАТЬ:
Этот ответ может не сработать, если вы не нацеливаетесь
es5
, я постараюсь сделать ответ более полным.Оригинальный ответ
Если CommonJS не установлен ( что определяет
exports
), вам необходимо удалить эту строку из своегоtsconfig.json
:Согласно комментариям, это само по себе может не работать с более поздними версиями
tsc
. Если это так, вы можете установить загрузчик модулей, например CommonJS, SystemJS или RequireJS, а затем указать это.Примечание:
Посмотрите на созданный вами
main.js
файлtsc
. Вы найдете это на самом верху:Это корень сообщения об ошибке, и после удаления
"module": "commonjs",
он исчезнет.источник
"module": "commonJs",
:(Несколько других решений для этой проблемы
источник
npm install @babel/plugin-transform-modules-commonjs
и добавление в плагины .babelrc разрешило мой вопрос.
источник
Я решил проблему, удалив
"type": "module"
поле изpackage.json
.источник
мое решение - это сумма всего вышеперечисленного с небольшими хитростями, которые я добавил, в основном я добавил это в свой html-код
это даже позволяет вам использовать
import
вместо этого,require
если вы используете электрон или что-то в этом роде, и он отлично работает с машинописным текстом 3.5.1, target: es3 -> esnext.источник
app.js:3 Uncaught ReferenceError: require is not defined
У меня была такая же проблема , и решить ее , добавив « ES5 » библиотеку tsconfig.json , как это:
источник
Для людей, которые все еще сталкиваются с этой проблемой, если ваш целевой компилятор установлен на ES6, вам нужно указать babel, чтобы он пропустил преобразование модуля. Для этого добавьте это в свой
.babelrc
файлисточник
<script>
тегом. Я надеялся использовать модуль вместе со старым кодом, и похоже, что это невозможно. Это, по крайней мере, позволяет мне использовать ES6 и позволяет мне заниматься экспортом позже.plugins
опции. Проверьте babeljs.io/docs/plugins/#modulesЭто исправлено установкой параметра
module
компилятора наes6
:источник
У меня тоже была такая же ошибка. В моем случае это произошло из-за того, что в нашем проекте TypeScript AngularJS был устаревший оператор импорта, например:
который был скомпилирован в JavaScript следующим образом:
Это было необходимо в старые времена, потому что мы тогда использовали
IAttributes
код, и TypeScript не знал бы, что с ним делать в противном случае. Но после удаления оператора импорта и преобразованияIAttributes
вng.IAttributes
эти две строки JavaScript исчезли, как и сообщение об ошибке.источник
Просто добавь
libraryTarget: 'umd'
вот такисточник
для меня удаление
"esModuleInterop": true
из tsconfig.json помогло.источник
Для некоторых проектов ASP.NET
import
иexport
может вообще не использоваться в ваших TypeScript.Ошибка вопроса появилась, когда я попытался это сделать, и только позже я обнаружил, что мне просто нужно добавить сгенерированный скрипт JS в представление следующим образом:
источник
Попробуйте то, что предложил @iFreilicht выше. Если это не сработало после того, как вы установили веб-пакет и все такое, возможно, вы просто скопировали конфигурацию веб-пакета из Интернета и настроили там, что вы хотите, чтобы вывод по ошибке поддерживал CommonJS. Убедитесь, что это не так
webpack.config.js
:источник
Была такая же проблема и исправлена путем изменения порядка загрузки пакетов JS.
Проверьте порядок, в котором вызываются нужные вам пакеты, и загрузите их в соответствующем порядке.
В моем конкретном случае (без использования модуля Bundler) мне нужно нагрузки
Redux
, затемRedux Thunk
, затемReact Redux
. ПогрузкаReact Redux
раньшеRedux Thunk
дала бы мнеexports is not defined
.источник
Примечание: это может быть неприменимо для ответа OP, но я получал эту ошибку, и вот как я ее решил.
Итак, проблема, с которой я столкнулся, заключалась в том, что я получал эту ошибку, когда извлекал библиотеку js из определенного CDN.
Единственное, что я делал неправильно, это импортировал из
cjs
каталога CDN следующим образом:https://cdn.jsdelivr.net/npm/@popperjs/core@2.4.0/dist/cjs/popper.min.js
Заметили
dist/cjs
деталь? Вот где была проблема.Я вернулся к CDN (jsdelivr) в моем случае и нашел
umd
папку. И я мог бы найти еще один набор изpopper.min.js
которых был правильный файл для импорта:https://cdn.jsdelivr.net/npm/@popperjs/core@2.4.0/dist/umd/popper.min.js
.источник
источник
У меня была такая же проблема, но для моей настройки требовалось другое решение.
Пользуюсь
create-react-app-rewired
пакетом сconfig-overrides.js
файлом. Раньше я использовалaddBabelPresets
импорт (вoverride()
методе) изcustomize-cra
и решил абстрагировать эти пресеты в отдельный файл. По совпадению, это решило мою проблему.Я добавил
useBabelRc()
вoverride()
методconfig-overrides.js
и создалbabel.config.js
файл со следующим:источник