exports
No desenvolvimento de scripts para FiveM, a comunicação entre diferentes recursos (resources) é essencial.
O exports é uma ferramenta poderosa que permite que funções de um script sejam acessíveis a outros scripts, facilitando a integração e reutilização de funcionalidades.
Isso torna o desenvolvimento modular e eficiente, promovendo boas práticas.
Em JavaScript, o conceito de exports no FiveM é semelhante à exportação de módulos em outros contextos, mas é adaptado ao ambiente do FiveM. Ele possibilita a interação entre scripts escritos em JavaScript e outros em Lua, permitindo, por exemplo, usar frameworks como ox_lib e QbCore diretamente em um código JavaScript.
export?
Um export é uma função ou método disponibilizado por um resource para que outros resources possam utilizá-lo. Com isso, você pode:
No FiveM, os exports podem ser usados tanto no servidor (server-side) quanto no cliente (client-side).
Vamos explorar a diferença:
Importante: Não é possível chamar diretamente um export do servidor no cliente, ou vice-versa.
Essa separação respeita o modelo de segurança e performance do FiveM.
exports no Client (JavaScript)
// client.js
global.exports('showNotification', (message) => {
console.log(message)
});
Para utilizar uma função com exports, basta utilizar o nome do resource que a função pertence.
Ex: resourceA
// client.js
exports['resourceA'].showNotification('Olá, este é um export no cliente!');
ou
exports.resourceA.showNotification('Olá, este é um export no cliente!');
exports no Server (JavaScript)
// server.js
global.exports('getPlayerData', (playerId) => {
const playerName = GetPlayerName(playerId);
return { id: playerId, name: playerName };
});
// server.js
const playerData = exports['resourceA'].getPlayerData(1); // 1 é o ID do jogador
console.log(playerData); // { id: 1, name: 'Jogador1' }
ox_lib e QbCoreSe você utiliza Lua frameworks como ox_lib, pode chamar seus métodos exportados diretamente em JavaScript.
OBS: é OBRIGATÓRIO o uso da palavrinha global antes do export ao realizar chamadas a código LUA
(ox_lib)
global.exports.ox_target.addGlobalPed({
{
name = 'debug_ped_teste',
event = 'ox_target:debug',
icon = 'fa-solid fa-male',
label = 'Teste Ox Lib',
distance = 2
}
})
Feito isso, agora você verá uma noma opção ao passar o target(olhinho) sobre qualquer NPC, caso utilize ox_target na sua base.
// client.js
global.exports['qb-core'].DrawText('Testando o Draw Text QbCore via exports')
| Aspecto | Server-side | Client-side |
|---|---|---|
| Local de execução | No servidor (backend) | No cliente (jogador) |
| Performance | Não impacta diretamente os jogadores | Pode impactar FPS se mal implementado |
| Comunicação | Entre scripts do servidor | Entre scripts do cliente |
| Uso típico | Gestão de dados, validações, controle | Exibição de UI, interações locais |
Os exports são essenciais para o desenvolvimento modular no FiveM. Eles permitem integrar funcionalidades em diferentes linguagens, como JavaScript e Lua, aumentando a flexibilidade e reutilização de código.
Com uma compreensão clara de como utilizá-los no servidor e no cliente, você poderá criar scripts mais organizados e profissionais, otimizando o fluxo de trabalho em projetos complexos.