23. June 2015
ExtJs , programming
So, after (re)reading the sencha docs and forums a couple of times I have come up with an alternate strategy for maintaining a utility library as a package... Not sure if it will not change at some point but so far it seems to be ok-ish...
Anyway, the requirements were:
- it should be possible to share the lib between apps / projects (obviously)
- the lib should have its own source control storage without having to use workspaces and such
- in should be possible to pack it and deliver as a package in the future (not sure it it will ever be the case though ;)
- It should be ready for the ExtJs 6 universal app usage
So what i did was:
- I created a package within one of my apps and moved it to a separate repo
- I created 3 subfolders under the src folder: core, classic, and modern; they will hold the core code as well as the ui for both modes
- in the app's packages folder I created a Junction to the new source controlled package folder
- in the app.json I added my app in the requires array - at this stage it is ok to reference the classes through the PackageName (in my case gm) namespace
So far it looks like the package buids-in nicely into the consumer app and at the same time it is independently source controlled which were my primary concerns.
There are some problems building the package itself as it is not a part of an app or a workspace. I guess it can be simply copied over to a temp app and then built as required. Not too fancy indeed, though at this stage I have no drive to investigate it further.
- As of ExtJs 6, i leaned towards using universal apps. therefore the code organisation changes a bit and the code goes to src, modern and classic folders respectively
- When requiring a package class in the generic code (not toolkit specific) then there must be package equivalents for a required class for both toolkits - otherewise building will fail for the code not implemented for a particular toolkit
- And finally, made the package build as expected - instead of simply drilling down to the packages/local/packageName and running sencha package build (that throws errors related to missing Ext classes), the command should include the sdk param, so the cmd knows where ExtJs stuff actually is (obviously not in the default location in my case ;)