If libraries are loaded at compile-time and set in properties of a top-level script, libraries are embedded in the top-level script. The script does not require libraries and ModuleLoader at run-time.
The script is good to copy to other computers or distribute it. On the other hand, libraries are not updated until recompiling the top-level script. If you want to use newest libraries always, see the next section "Loading Libraries at Runtime".
A benefit of loading libraries at run-time is that newest libraries can be used always. It is recommended to follow AppleScript Libraries way.
In the case you must use ModuleLoader, evaluate "script "ModuleLoader"'s setup(me)" statement not in a property definition but in run handler or open handler as follows
Consider you want to use other libraries from a library. Just like the top level script, prepare properties which evaluate module commands. When the library is loaded, ModuleLoader will set libraries to the properties which evaluate module commands.
For tests of the library, evaluate "script "ModuleLoader"'s setup(me)" at run-time.
Following example shows loading libraries stored in an application bundles. It is assumed that libraries are placed under "Resources/Script Libraries" folder.
Add the location in the bundle where libraries are located with "prepend_path" handler of a ModuleLoader script. And then call setup command to load and set libraries.
This is not recommended way. It is recommended to embed all libraries into properties at compile-time or to use built-in "AppleScript Libraries" introduced in OS X 10.9.
Above sample shows flexibility of ModuleLoader.