Ao tentar implementar um módulo seguindo o manual oficial , recebo esta mensagem de erro:
ReferenceError não capturado: as exportações não estão definidas
em app.js: 2
Mas em nenhum lugar do meu código eu uso o nome exports
.
Como posso consertar isso?
arquivos
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.
fonte
fonte
exports
com um s no final em vez deexport
? Isso explicaria a mensagem de erro, pois s está errado.Respostas:
EDITAR:
Esta resposta pode não funcionar, dependendo se você não estiver
es5
mais segmentando , tentarei tornar a resposta mais completa.Resposta Original
Se o CommonJS não estiver instalado (o que define
exports
), você deve remover esta linha detsconfig.json
:De acordo com os comentários, isso sozinho pode não funcionar com versões posteriores do
tsc
. Se for esse o caso, você pode instalar um carregador de módulo como CommonJS, SystemJS ou RequireJS e, em seguida, especificar isso.Nota:
Olhe para o
main.js
arquivo quetsc
gerou. Você encontrará isso no topo:É a raiz da mensagem de erro e, após a remoção
"module": "commonjs",
, desaparecerá.fonte
"module": "commonJs",
:(Algumas outras soluções para este problema
fonte
npm install @babel/plugin-transform-modules-commonjs
e adicionar aos plug-ins .babelrc resolveu minha dúvida.
fonte
minha solução é uma soma de tudo acima com pequenos truques que adicionei, basicamente adicionei isso ao meu código html
isso até permite que você use em
import
vez derequire
se estiver usando elétron ou algo assim, e funciona bem com o texto datilografado 3.5.1, alvo: es3 -> esnext.fonte
app.js:3 Uncaught ReferenceError: require is not defined
Resolvi o problema removendo o
"type": "module"
campo depackage.json
.fonte
Eu tive o mesmo problema e resolvi adicionando a biblioteca " es5 " ao tsconfig.json assim:
fonte
Para as pessoas que ainda têm esse problema, se o destino do compilador estiver definido como ES6, você precisará dizer ao babel para pular a transformação do módulo. Para fazer isso, adicione isso ao seu
.babelrc
arquivofonte
<script>
tag. Eu esperava usar o módulo junto com o código mais antigo e parece que não é possível. Isso me permite pelo menos usar o ES6 e lidar com a exportação mais tarde.plugins
opção. Confira babeljs.io/docs/plugins/#modulesIsso é corrigido definindo a
module
opção do compilador paraes6
:fonte
Eu também tive esse mesmo erro. No meu caso, foi porque tínhamos uma instrução de importação antiquada em nosso projeto TypeScript AngularJS como esta:
que foi compilado para JavaScript assim:
Isso era necessário nos velhos tempos porque então
IAttributes
usávamos no código e o TypeScript não saberia o que fazer com ele de outra forma. Mas depois de remover a instrução de importação e converterIAttributes
parang.IAttributes
essas duas linhas de JavaScript, desapareceu - e também a mensagem de erro.fonte
Basta adicionar
libraryTarget: 'umd'
, assimfonte
para mim, remover
"esModuleInterop": true
do tsconfig.json funcionou.fonte
Para alguns projetos ASP.NET
import
eexport
não podem ser usados em seus scripts de tipo.O erro da pergunta apareceu quando tentei fazer isso e só descobri mais tarde que só precisava adicionar o script JS gerado ao View assim:
fonte
Experimente o que @iFreilicht sugeriu acima. Se isso não funcionou depois de instalar o webpack e tudo, você pode ter apenas copiado uma configuração do webpack de algum lugar online e configurado lá que deseja que a saída suporte CommonJS por engano. Certifique-se de que este não seja o caso em
webpack.config.js
:fonte
Tive o mesmo problema e resolvi alterando a ordem de carregamento dos pacotes JS.
Verifique a ordem em que os pacotes de que você precisa estão sendo chamados e carregue-os na ordem apropriada.
No meu caso específico (não usando o módulo bundler) Eu precisava de carga
Redux
, em seguidaRedux Thunk
, entãoReact Redux
. CarregandoReact Redux
antesRedux Thunk
me dariaexports is not defined
.fonte
Nota: Isso pode não ser aplicável para a resposta de OP, mas eu estava recebendo este erro e foi assim que resolvi.
Portanto, o problema que eu estava enfrentando era que recebia esse erro quando recuperava uma biblioteca 'js' de um CDN específico.
A única coisa errada que eu estava fazendo era importar do
cjs
diretório do CDN assim:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/cjs/popper.min.js
Observe a
dist/cjs
parte? É aí que estava o problema.Voltei para o CDN (jsdelivr) no meu caso e naveguei até encontrar a
umd
pasta. E eu poderia encontrar um outro conjunto depopper.min.js
que era o arquivo correto para importação:https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js
.fonte
fonte
Eu tive o mesmo problema, mas minha configuração exigia uma solução diferente.
Estou usando o
create-react-app-rewired
pacote com umconfig-overrides.js
arquivo. Anteriormente, eu estava usando aaddBabelPresets
importação (nooverride()
método) decustomize-cra
e decidi abstrair essas predefinições em um arquivo separado. Coincidentemente, isso resolveu meu problema.Eu adicionei
useBabelRc()
aooverride()
método emconfig-overrides.js
e criei umbabel.config.js
arquivo com o seguinte:fonte