[openstack-dev] [Horizon] the future of angularjs development in Horizon

Richard Jones r1chardj0n3s at gmail.com
Thu Nov 13 00:32:20 UTC 2014

On 13 November 2014 09:35, Adam Young <ayoung at redhat.com> wrote:

> On 11/12/2014 03:03 AM, Matthias Runge wrote:
>> On 12/11/14 08:40, Richard Jones wrote:
>>  I believe the nodeenv method of installing node solves this, as it's
>>> entirely local to the development environment.
>> See below, this touches package build as well.
>>>      I will have to go through all dependencies and do a review, if
>>> those are
>>>      acceptable for inclusion e.g in Fedora. The same is true for Thomas
>>>      Goirand for inclusion in Debian.
>>>      >
>>>      > Petr Belanyi has added optional jshint install for js linting into
>>>      > Horizon and it installs nodejs as it depends on it. Could this
>>> approach
>>>      > work for our need of js tooling too? [1]
>>>      Sigh, this nonsense doesn't go away? This is the third time the same
>>>      issue comes up.
>>>      jshint is NOT free software.
>>>      https://github.com/jshint/jshint/blob/master/src/jshint.js#L19
>>> They're trying to resolve that https://github.com/jshint/
>>> jshint/issues/1234
>>> But regardless, jshint doesn't have to be installed from a Linux
>>> repository; it's usually installed using npm alongside the other node
>>> tools.
>>>  Thanks for the pointer, this is good news!
>> Regarding package managers, my POV is completely different. From a
>> distributor perspective, where customers expect everything provided from
>> a single source, I'm not using npm, pip etc. I'm packaging that stuff
>> properly before using it.
>> There are companies out there, where security policy does not allow to
>> install software from a third party repository. pypi etc. are considered
>> as a third party here in this context.
>> I would prefer to have the complete tool chain available as (RPM)
>> packages. I am executing unit tests etc. during package build. Our
>> builders don't have access to the internet, downloading any other stuff
>> from the internet is no option.
> And this is really not-negotiable, too.  Debian has the same requirements,
> it is not Red Hat/Fedora speciufic.  It is no different than the Python
> Code.  We dodn't pip install for RHOSP for the Python packages, and we
> can't use any of the language specific package managers.
> But, we are used to it, and dealing with package dependencies is what we
> do.  Having these in Fedora, while painful, will be ultimately very
> valuable.

I guess a point of difference here is that the Linux packaging systems
target global installation, whereas bower and npm (in our case) target a
local installation. It's effectively vendoring the code, but you still have
to pull it down from a repository for each installation. Don't worry, I'm
not going to suggest we actually move back to vendoring :)

We're currently using xstatic and that works with Linux packaging because
it was designed to cope with being a global installation. The current
Horizon codebase has a django-xstatic plugin which further makes dealing
with xstatic components nicer - for example it handles path management and
static file compilation (JS minification and concatenation, for example).
That's really nice, but poses some problems:

- we would need to xstatic-ify (and deb/rpm-ify) all those components
- we could run into global version conflict issues if we run more than one
service on a system - is this likely to be an issue in practise though?
- as far as I'm aware, the xstatic JS minification is not angular-aware,
and will break angular code that has not been written to be
dumb-minifier-aware (the angular minifier "ngMin" is written in node and
knows how to do things more correctly); adding dumb-minifier-awareness to
angular code makes it ugly and more error-prone :/

On the minification issue though: I talked to a few people at the summit
and we agreed that minification should just be avoided; gzip at the
transport layer buys significantly better compression, and has the added
bonus that the resultant code is readable. I note that the Debian JS
guidelines* only recommend that libraries *should* be minified (though I'm
unsure why they even recommend that).

One further note on xstatic vs. bower: during development it's very useful
to be able to install random components from bower to try them out; during
angboard development I would sometimes install and remove half a dozen
components just in one day. I would hope that whatever solution we come up
with has at least some of this flexibility for experimentation.


* https://wiki.debian.org/Javascript/Policy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20141113/fdbd1b02/attachment.html>

More information about the OpenStack-dev mailing list