Libertar automaticamente módulos lua não utilizados

Quando você requirecria um módulo em Lua, uma cópia é armazenada em package.loaded.
Mesmo se você não for usar o módulo novamente, ele pode ser acessado globalmente, evitando a coleta de lixo.

Embora você sempre possa definir a package.loadedentrada como nil, por que não fazer isso acontecer automaticamente, como o resto do gerenciamento de memória de Lua?

A solução é tornar os valores package.loadedfracos, permitindo que sejam coletados quando não forem usados ​​em nenhum outro lugar:

setmetatable(package.loaded, {__mode = "v"})

Aqui está um módulo completo que fará isso (e muito mais)