No such export X in resource Y: como corrigir no FiveM
Recebendo 'No such export X in resource Y' no FiveM? As causas: recurso não iniciado, nome de pasta incorreto, incompatibilidade entre cliente e servidor, exportação renomeada e ordem de inicialização.
O console mostra isto, frequentemente em um loop:
SCRIPT ERROR: @my_script/server/main.lua:14: No such export GetItemCount in resource my_inventorySeu script chamou exports['my_inventory']:GetItemCount(). Naquele momento, my_inventory não tinha uma exportação com esse nome. A mensagem nomeia ambas as partes, então a correção é uma de um pequeno número de causas. Este guia cobre o caso genérico. Se a exportação for getSharedObject de es_extended, leia No such export getSharedObject in resource es_extended em vez disso, que tem as causas específicas do ESX.
1. O recurso não foi iniciado
Uma exportação só existe enquanto seu recurso está em execução. Verifique o console na inicialização:
- O recurso está listado em
server.cfgcomensureoustart? - Ele começou sem erros, ou imprimiu
Couldn't start resourceouFailed to load script? - Está parado no txAdmin? Verifique a página Recursos.
Um recurso que falhou em iniciar, por exemplo por causa de um erro de sintaxe Lua ou uma dependência ausente, não tem exportações. Corrija primeiro seu próprio erro. Veja Couldn't start resource e could not find dependency. Um erro de sintaxe em particular é coberto em Lua syntax error: unexpected symbol near.
2. O nome do recurso está errado
exports['my_inventory'] usa o nome da pasta do recurso, não o título do script. Se a pasta foi renomeada, todos os scripts que a chamam pelo nome antigo falham.
Situações típicas:
- Você renomeou
my_inventory-masteroumy_inventory-mainpara algo mais curto e continuou chamando o nome antigo. - O nome usa um hífen em um lugar e um sublinhado em outro:
my-inventoryemy_inventorysão recursos diferentes. - A capitalização difere: corresponda exatamente à pasta.
- O recurso fica em uma pasta com colchetes como
[qb]. Os colchetes são apenas uma categoria: eles não fazem parte do nome, então usemy_inventory, não[qb]/my_inventory.
Alguns recursos substituem outro com provide 'other_name' em seu fxmanifest, para que scripts pedindo o nome antigo ainda funcionem. Se você substituiu um recurso com um compatível e o nome antigo falha, verifique se o novo o fornece, e que você removeu a pasta antiga para que os dois não se choquem.
3. A exportação está do outro lado
As exportações são por lado. Uma exportação registrada em um script do cliente só pode ser chamada de outro script do cliente, e uma registrada no servidor apenas de um script do servidor.
-- my_inventory/server/main.lua
exports('GetItemCount', function(source, item)
return 0
end)-- my_script/client/main.lua
-- fails: GetItemCount exists on the server only
local count = exports['my_inventory']:GetItemCount('water')Para verificar, procure nos arquivos do provedor: a linha exports(...) está em client/ ou server/, ou em um arquivo listado em shared_scripts, que roda em ambos os lados. Se a exportação for apenas do servidor, chame-a de um script do servidor, e obtenha os dados para o cliente com um evento ou um retorno de chamada, veja server callbacks.
4. A exportação foi renomeada ou removida
Os recursos mudam entre versões. Uma exportação chamada GetItemCount em uma versão mais antiga pode ser getItemCount ou Search em uma mais nova, e os nomes Lua são sensíveis a maiúsculas. Se o erro apareceu após uma atualização de qualquer recurso:
- Abra o
fxmanifest.lua,READMEou documentação do provedor e procure pela lista de exportações atual. - Procure a pasta do recurso por
exports(e pelo nome que você chama. - Atualize sua chamada, ou atualize o outro recurso para a versão para a qual o script foi escrito.
Lembre-se de que o inverso também existe: um script atualizado para chamar uma exportação nova, enquanto o provedor ainda executa uma versão antiga sem ela.
grep -rn "exports(" resources/[mic]/my_inventoryNo Windows, use a caixa de pesquisa do seu editor.
5. Ordem de inicialização e dependências
Se o recurso existe e tem a exportação, mas a chamada acontece antes de estar pronto, você recebe o mesmo erro. Os recursos começam na ordem de server.cfg:
ensure oxmysql
ensure ox_lib
ensure my_inventory
ensure my_scriptColoque o provedor acima do script que o usa. Para uma correção permanente, declare o link no fxmanifest.lua do chamador:
dependency 'my_inventory'Então FiveM inicia my_inventory primeiro, e se recusa a iniciar o script sem ele. Mais sobre ordenação em ordem de recursos em server.cfg.
Duas armadilhas relacionadas:
- A exportação é registrada tarde.
exports('Name', fn)roda quando a linha é alcançada. Se o arquivo errar acima dela, ou registrar após umWaitlongo, os chamadores que rodam no meio falham. Registre exportações perto do topo do arquivo. - Uma chamada no tempo de carregamento. Uma chamada de nível superior como
local count = exports['my_inventory']:GetItemCount('water')roda no momento em que seu arquivo carrega. Mova-a para um evento ou uma thread, ou certifique-se de que a dependência já está em execução.
Você também pode proteger uma integração opcional com pcall e com uma verificação de que o recurso está em execução:
if GetResourceState('my_inventory') == 'started' then
local ok, count = pcall(function()
return exports['my_inventory']:GetItemCount('water')
end)
endGetResourceState retorna 'started', 'stopped', 'missing' ou outros estados, então você também pode registrar qual caso é. Para uma análise mais profunda de como as exportações funcionam, leia FiveM exports in Lua.
6. Reiniciado um recurso, não o outro
Reiniciar um provedor enquanto o servidor roda nem sempre reconecta os scripts que mantêm seus objetos. Depois que você reinicia ou atualiza um provedor, reinicie os scripts que o chamam, ou reinicie o servidor.
Lista de verificação
| Sintoma | Solução |
|---|---|
| Recurso não no console na inicialização | Adicione ensure my_inventory a server.cfg |
Couldn't start resource acima do erro |
Corrija o próprio erro do provedor primeiro |
| Pasta renomeada | Use o nome exato da pasta em exports['name'] |
| Exportação chamada do lado errado | Chame-a do lado que a define, ou use um evento/retorno |
| Erro após uma atualização | A exportação foi renomeada ou removida; verifique a lista de exportações atual do provedor |
| Erro apenas na inicialização | Coloque o provedor acima do chamador; adicione uma linha dependency |
| Ainda falhando após reinicialização do provedor | Reinicie os scripts que o chamam |
Respostas rápidas
O que significa 'No such export X in resource Y'?
Um script chamou exports['Y']:X() e o recurso Y não tinha uma exportação chamada X naquele momento. Y não está em execução, tem um nome diferente, define X do outro lado, ou não tem essa exportação nesta versão.
O nome do recurso é sensível a maiúsculas?
Trate como sensível a maiúsculas: o nome em exports['name'] tem que corresponder exatamente ao nome da pasta, incluindo hífens e sublinhados. Isso importa mais em servidores Linux.
A ordem de ensure corrige este erro?
Frequentemente, sim. Os recursos começam na ordem de server.cfg, então coloque o recurso que fornece a exportação acima do que a chama, ou adicione uma linha dependency ao fxmanifest.
Scripts sem esse problema
Mic PhoneUm celular dobrável que abre em tablet e chega ao celular de verdade do jogador.Ver script →
CCTV Security CamerasCâmeras posicionáveis, um tablet com várias telas ao vivo e fotos impressas como prova.Ver script →
Item Creator V2Crie itens usáveis com animações, props, efeitos e muito mais — sem escrever código.Ver script →