I tried to fight it too, but had to capitulate.
After some debugging my @Contribute(JavaScriptStackSource.class) was not set:
public class ModuleManagerImpl implements ModuleManager
{
private Resource resolveModuleNameToResource(String moduleName)
{
Resource resource = shimModuleNameToResource.get(moduleName);
if (resource != null)
{
return resource;
}
// Tack on a fake extension; otherwise modules whose name includes a
'.' get mangled
// by Resource.withExtension().
String baseName = String.format("/META-INF/modules/%s.EXT", moduleName);
Resource baseResource = classpathRoot.forFile(baseName);
for (String extension : extensions)
{
resource = baseResource.withExtension(extension);
if (resource.exists())
{
return resource;
}
}
// Return placeholder for null:
return classpathRoot;
}
My module is not listed in shimModuleNameToResource, and does not exist in
/META-INF/modules/%s.EXT. The result is an empty classpathRoot.
I think I don't fully understand JavaScriptStack. I think a method is missing:
Map<String, JavaScriptModuleConfiguration> getJavaScriptModules(). I would like
to have a example of how to include a AMD/UMD module. What about support for
CommonJS?
In the debugging process I found that @Contribute(ModuleManager.class) was the
perfect choice for me.
@Contribute(ModuleManager.class)
public static void setupMyBaseModules(MappedConfiguration<String, Object>
configuration, @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode)
{
String[] reactModules = {"react", "react-dom"};
String ext = productionMode ? ".min.js" : ".js";
for (String m : reactModules) {
configuration.add(m, new JavaScriptModuleConfiguration(new
ClasspathResource(String.format("META-INF/assets/js/%s%s", m, ext))));
}
}
I think I was fooled by:
The documentation for ModuleManager.class say:
"...This is primarily used to wrap non-AMD compliant libraries for use with
RequireJS"
The internal variable Map<String, Resource> shimModuleNameToResource in
ModuleManagerImpl. The shim prefix...
S-E
From: Chris Poulsen [via Apache Tapestry Mailing List Archives]
[mailto:[email protected]]
Sent: tirsdag 28. november 2017 08:34
To: Svein-Erik Løken <[email protected]>
Subject: Re: Contribute requirejs.config.paths to ModuleManager
Hi,
It has been a while since I last fought the module system, but in some
cases I've used a request filter to map between module and asset paths
(triggering on known module paths and then returning permanent redirects to
the actual asset urls in the filter) - This was necessary in order to get
stuff like CK editor to load properly as a module and still allowing it to
dynamically require its plugins IIRC.
--
Chris
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]