I do not have full context, but in general:

define() calls just register a module factory function for a given ID. No module tracing is done until there is a top level require([]) for it. Since during that tracing, if the registered module needs dependencies that are not loaded, then those need to be loaded async. Since it is not generically true that every define() call has all of its dependencies also available, the loader cannot guarantee any sync resolution for the module.

If the goal though is to just use AMD modules in dev, and you are distributing a built library that uses AMD modules internally, but wants to synchronously define one public export or global, then using an [AMD API shim](https://github.com/jrburke/requirejs/wiki/AMD-API-Shims) for that case makes sense. Many of them, including almond, allow sync require() at the end to generate that public export, since they do not do dynamic loading. That sync require is not supported by the AMD spec, but useful for those bundling purposes.