No such export getSharedObject in resource es_extended: a correção

Obtendo 'No such export getSharedObject in resource es_extended'? Isso significa que es_extended não está em execução quando seu script solicita. As causas, desde a ordem de início até uma falha na conexão com o banco de dados.

O erro completo geralmente fica assim, no console do servidor ou em F8:

text
SCRIPT ERROR: @my_script/server/main.lua:1: No such export getSharedObject in resource es_extended

O código está correto. exports['es_extended']:getSharedObject() é exatamente como ESX Legacy distribui seu objeto. O problema é quando ele é executado: naquele momento, es_extended não está lá para responder.

1. es_extended começa depois do seu script

Esta é a causa nove em cada dez vezes. FiveM inicia recursos na ordem de server.cfg, e um script que solicita ESX na primeira linha precisa que es_extended já esteja em execução.

Um pedido seguro para um servidor ESX:

cfg
# database and libraries first
ensure oxmysql
ensure ox_lib

# the framework
ensure es_extended
ensure [esx]

# everything else after
ensure [scripts]
ensure my_script

Cuidado com as categorias de pastas como [scripts]: ensure [scripts] inicia tudo dentro dela, portanto, se essa linha vier antes de ensure es_extended, todos os scripts nela contidos começarão muito cedo.

Você também pode fazer o próprio script esperar por ESX, declarando a dependência em seu fxmanifest.lua:

lua
dependency 'es_extended'

FiveM iniciará es_extended primeiro ou se recusará a iniciar o script se ele estiver faltando.

2. es_extended falha ao iniciar

Se es_extended travar durante a inicialização, suas exportações nunca existirão. Role o console do servidor até o topo e procure as linhas vermelhas de es_extended antes do erro do seu script. Os culpados de sempre:

  • O banco de dados. oxmysql não pode se conectar (uma senha errada, um banco de dados que não existe, MySQL não está em execução). Marque mysql_connection_string em seu server.cfg:
cfg
set mysql_connection_string "mysql://user:password@localhost/es_extended?charset=utf8mb4"
  • Uma dependência ausente. Compilações ESX Legacy recentes precisam de oxmysql e ox_lib iniciadas antes delas.
  • Tabelas ausentes. Uma nova instalação sem o ESX SQL importado falha na primeira consulta.

Corrija o primeiro erro e o erro de exportação desaparecerá com ele.

3. A pasta não se chama es_extended

A exportação reside em um recurso chamado exatamente es_extended. Estes quebram:

  • a pasta foi renomeada (es_extended-legacy, es_extended_main…);
  • há duas cópias de es_extended em pastas diferentes, e a cópia errada é iniciada;
  • em um host Linux, o nome tem letras maiúsculas diferentes (ES_Extended): o Linux diferencia maiúsculas de minúsculas, o Windows não.

Procure na sua pasta resources por fxmanifest.lua arquivos dentro de pastas chamadas es_extended e mantenha exatamente um.

4. Você reiniciou es_extended enquanto o servidor estava em execução

restart es_extended do console parece inofensivo, mas todo script que já pegou o objeto ESX mantém o antigo, e qualquer coisa que chame a exportação durante a reinicialização recebe esse erro. Depois de tocar em es_extended, reinicie todo o servidor ou, pelo menos, reinicie os scripts ESX depois dele.

5. O servidor não é ESX

Se o seu servidor executa QBCore ou QBox, não há es_extended e um script somente ESX falha exatamente assim. Procure na configuração do script uma opção de framework ou use uma versão feita para seu framework. O equivalente QBCore desse erro é abordado em tentativa de indexar um valor nil (global 'QBCore').

Verificando em dez segundos

No console do servidor:

text
ensure es_extended

Se es_extended iniciar corretamente e o erro persistir, esta é a ordem de início. Se imprimir erros, corrija-os primeiro. Então:

text
restart my_script

Se o script iniciar agora sem o erro, mova seu ensure abaixo de es_extended em server.cfg para que ele também funcione após a reinicialização.

Resumo

Causa Como você percebe Corrigir
Iniciar pedido Funciona depois de restart my_script ensure es_extended acima do script ou dependency 'es_extended'
es_extended travou Linhas es_extended vermelhas acima do erro Corrigir o banco de dados ou a dependência ausente
Nome de pasta incorreto ensure es_extended diz que não consegue encontrá-lo Exatamente uma pasta chamada es_extended
Reinicialização ao vivo Erros logo após restart es_extended Reinicie o servidor
Não é um ESX servidor Não há es_extended Use a versão QBCore / QBox do script

Respostas rápidas

O que significa 'No such export getSharedObject in resource es_extended'?

Seu script chamou exports['es_extended']:getSharedObject() enquanto es_extended não estava em execução: ele ainda não foi iniciado, falhou ao iniciar ou tem um nome de pasta diferente.

Como faço para que es_extended comece antes do meu script?

Coloque ensure es_extended acima do script em server.cfg, depois de oxmysql e ox_lib. Adicionar dependency 'es_extended' ao fxmanifest do script também faz com que FiveM inicie es_extended primeiro.

Posso reiniciar es_extended enquanto o servidor está em execução?

Não é uma boa ideia: todo recurso que contém o objeto ESX mantém o antigo. Reinicie todo o servidor ou reinicie os scripts que usam ESX depois de es_extended.

Scripts sem esse problema

Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →CCTV Security CamerasCâmeras posicionáveis, um tablet com várias telas ao vivo e fotos impressas como prova.Ver script →Crypto MiningCompre um galpão, monte rigs peça por peça e minere moedas num mercado que se mexe.Ver script →

Continue lendo