Hi Dimitri

Well done for finding that, what a nightmare.  I think I’ve found how to 
disable the .babelrc, but I think the real issue is a bug in Babel with 
presets; whatever, the fix is to not use presets and load the plugins 
individually which is what I’ve done and I’ve just pushed it up.  Please can 
you reinstate your .babelrc’s and see if this solves it?

This release includes the custom database path; translations I’ll get back onto 
later on today (I’m a bit behind on my schedule)

That’s great that your using this in production, you’re beating me to it in 
mine!

Cheers
John

From:  Dimitri <mi...@cargosoft.ru>
Reply-To:  qooxdoo Development <qooxdoo-devel@lists.sourceforge.net>
Date:  Thursday, 18 February 2016 at 08:16
To:  <qooxdoo-devel@lists.sourceforge.net>
Subject:  Re: [qooxdoo-devel] QxCompiler - add ES6, faster compilation, and 
100% Javascript API to building applications

John,

This turns to be one of that "bug reports that you like to hear" ;) I've 
identified the culprit, it was .babelrc in my home dir. We were totally wrong 
in that Babel ignores .babelrc in embedded mode. In fact, it looks for it 
*everywhere*:

[mitya@localhost test]$ strace node ./compile-app-demo.js 2>&1 | grep babelrc
access("/home/mitya/qxcompiler/testdata/qxt/source/class/qxt/.babelrc", F_OK) = 
-1 ENOENT (No such file or directory)
access("/home/mitya/qxcompiler/testdata/qxt/source/class/.babelrc", F_OK) = -1 
ENOENT (No such file or directory)
access("/home/mitya/qxcompiler/testdata/qxt/source/.babelrc", F_OK) = -1 ENOENT 
(No such file or directory)
access("/home/mitya/qxcompiler/testdata/qxt/.babelrc", F_OK) = -1 ENOENT (No 
such file or directory)
access("/home/mitya/qxcompiler/testdata/.babelrc", F_OK) = -1 ENOENT (No such 
file or directory)
access("/home/mitya/qxcompiler/.babelrc", F_OK) = -1 ENOENT (No such file or 
directory)
access("/home/mitya/.babelrc", F_OK)    = 0
open("/home/mitya/.babelrc", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 11

After the file has been encountered, seems like it tries to resolve 
presets/plugins relative to that file location.

With that file removed, everything finally worked with qxt! But then I tried to 
build my own project, and got similar error:

/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:393
          throw new Error("Couldn't find preset " + JSON.stringify(val) + " 
relative to directory " + JSON.stringify(dirname));
          ^

Error: Couldn't find preset "es2015" relative to directory 
"/home/mitya/Projects/foo/source/class/foo"
    at 
/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:393:17
    at Array.map (native)
    at OptionManager.resolvePresets 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:385:20)
    at OptionManager.mergePresets 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:369:10)
    at OptionManager.mergeOptions 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:328:14)
    at OptionManager.init 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:486:10)
    at File.initOptions 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/index.js:211:75)
    at new File 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/index.js:129:22)
    at Pipeline.transform 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/pipeline.js:48:16)
    at /home/mitya/qxcompiler/lib/qxcompiler/ClassFile.js:220:32

This time no .babelrc files anywhere in the project structure. Remember I 
earlier did "npm link async" in the project dir so that build script would run. 
To get rid of this, I removed foo/node_modules and symlinked 
qxcompiler/node_modules to the project dir. Got yet another error, this time 
with UploadMgr:

Error: Couldn't find preset "es2015" relative to directory 
"/home/mitya/qooxdoo-contrib/UploadMgr/source/class/com/zenesis/qx/upload"
    at 
/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:393:17
    at Array.map (native)
    at OptionManager.resolvePresets 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:385:20)
    at OptionManager.mergePresets 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:369:10)
    at OptionManager.mergeOptions 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:328:14)
    at OptionManager.init 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:486:10)
    at File.initOptions 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/index.js:211:75)
    at new File 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/index.js:129:22)
    at Pipeline.transform 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/pipeline.js:48:16)
    at /home/mitya/qxcompiler/lib/qxcompiler/ClassFile.js:220:32

With node_modules symlinked to qooxdoo-contrib/UploadMgr, finally everything 
worked. This is easily reproducible if you move qxt outside of QxCompiler dir, 
place build script inside qxt and adjust paths accordingly (I used absolute 
paths).

Transpiling and compression work just fine. Yet I've encountered a small bug 
with translations. If a message is translated with this.tr*() set of functions, 
everything works fine. If qx.locale.Manager.tr() is used, such a message simply 
won't make it into the build.
I think we should unconditionally transfer all the *.po strings into the build, 
since translation in the app could be done based on dynamic, computed values.

I think that as soon as the remaining issues are fixed, QxCompiler can be 
considered fairly stable. I'm already integrating it into our build process.

Cheers!
Dimitri

Hi Dimitri

Sorry I realise now that was a rash suggestion, obviously it had to be in the 
test directory to work.

I think there’s something odd with your installation because I’ve just switched 
to a Centos 6.5 VM that has never had node installed, installed Node 4, 
ImageMagick, cloned the QxCompiler repo, and run npm install.  I discovered a 
problem with package.json where babel-types wasn’t listed, but once I fixed 
that with "npm install babel-types —save” I was able to “cd test ; 
./compile-app-demo.js” and get a working app, with resources and Bable 
transpiling.

I tried Node 5 too on the same machine (deleting my ~/.npm, node_modules, and 
testdata/qxt/source-output directories first) and that also works for me; also 
the ./compile-app-demo-build.js

If I list installed plugins I get:
$ npm list | grep 2015
├─┬ babel-preset-es2015@6.5.0
│ ├─┬ babel-plugin-check-es2015-constants@6.5.0
│ ├─┬ babel-plugin-transform-es2015-arrow-functions@6.5.2
│ ├─┬ babel-plugin-transform-es2015-block-scoped-functions@6.5.0
│ ├─┬ babel-plugin-transform-es2015-block-scoping@6.5.0
│ ├─┬ babel-plugin-transform-es2015-classes@6.5.2
│ ├─┬ babel-plugin-transform-es2015-computed-properties@6.5.2
│ ├─┬ babel-plugin-transform-es2015-destructuring@6.5.0
│ ├─┬ babel-plugin-transform-es2015-for-of@6.5.2
│ ├─┬ babel-plugin-transform-es2015-function-name@6.5.0
│ ├─┬ babel-plugin-transform-es2015-literals@6.5.0
│ ├─┬ babel-plugin-transform-es2015-modules-commonjs@6.5.2
│ ├─┬ babel-plugin-transform-es2015-object-super@6.5.0
│ ├─┬ babel-plugin-transform-es2015-parameters@6.5.0
│ ├─┬ babel-plugin-transform-es2015-shorthand-properties@6.5.0
│ ├─┬ babel-plugin-transform-es2015-spread@6.5.2
│ ├─┬ babel-plugin-transform-es2015-sticky-regex@6.5.0
│ ├─┬ babel-plugin-transform-es2015-template-literals@6.5.2
│ ├─┬ babel-plugin-transform-es2015-typeof-symbol@6.5.0
│ ├─┬ babel-plugin-transform-es2015-unicode-regex@6.5.0

The array of plugins that was in QxCompiler previously was the equivalent of 
the es2015 preset, albeit the list was slightly out of date so updating the 
code to use a preset instead of plugins should only improve support, but you 
had it working with the preset yesterday so I don’t understand why it is not 
working now.

Is it possible that you have Babel installed globally and it’s conflicting 
somehow?  I’ve updated the package.json at GitHub to explicitly reference 
babel-types, and rechecking out etc on my Centos 6 VM now runs without any 
complaints so it might be worth updating and trying again.

Regards
John

From:  Dimitri <mi...@cargosoft.ru>
Reply-To:  qooxdoo Development <qooxdoo-devel@lists.sourceforge.net>
Date:  Wednesday, 17 February 2016 at 23:02
To:  <qooxdoo-devel@lists.sourceforge.net>
Subject:  Re: [qooxdoo-devel] QxCompiler - add ES6, faster compilation, and 
100% Javascript API to building applications

[mitya@localhost qxcompiler]$ ./test/compile-app-demo.js 
Error: Error: ENOENT: no such file or directory, open 
'../testdata/qxt/Manifest.json'


Hmm - what happens if you change directory to the root of the QxCompiler repo 
and run ./test/compile-app-demo.js?

From:  Dimitri <mi...@cargosoft.ru>
Reply-To:  qooxdoo Development <qooxdoo-devel@lists.sourceforge.net>
Date:  Wednesday, 17 February 2016 at 22:31
To:  <qooxdoo-devel@lists.sourceforge.net>
Subject:  Re: [qooxdoo-devel] QxCompiler - add ES6, faster compilation, and 
100% Javascript API to building applications

No cigar this time :-\

[mitya@localhost test]$ ./compile-app-demo.js 
/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:393
          throw new Error("Couldn't find preset " + JSON.stringify(val) + " 
relative to directory " + JSON.stringify(dirname));
          ^

Error: Couldn't find preset "es2015" relative to directory "/home/mitya"
    at 
/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:393:17
    at Array.map (native)
    at OptionManager.resolvePresets 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:385:20)
    at OptionManager.mergePresets 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:369:10)
    at OptionManager.mergeOptions 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:328:14)
    at OptionManager.addConfig 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:234:10)
    at OptionManager.findConfigs 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:434:16)
    at OptionManager.init 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/options/option-manager.js:482:12)
    at File.initOptions 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/index.js:211:75)
    at new File 
(/home/mitya/qxcompiler/node_modules/babel-core/lib/transformation/file/index.js:129:22)

Dunno why it looks for presets in my home dir. In my previous experiment, 
everything went smooth (except that it didn't in fact collect any qooxdoo deps, 
since I removed all plugins - but transpiling itself went fine).

As for uglify - ah, that was stupid. I used original uglify, not uglify-js. 
Just tried the latter (2.6.1) - indeed, it takes ~10 secs for qxt. Not bad.

В Ср, 17/02/2016 в 20:56 +0000, John Spackman пишет:
Got it – it was a bug in my plugin I introduced a while ago, but Chrome 
obviously supports arrow functions natively so I didn’t pick up that the 
translation wasn’t happening any more.  The .babelrc is not needed for this 
because we’re using it embedded, I think the .babelrc is only for the CLI

That’s very a good point about the polypill BTW because it’s not being included 
and it should be, I’ll add that in tomorrow.

The problem with translations is fixed now too, sorry about that I should have 
deleted the output directory before retesting :oops:

What options are you running Uglify with, and what version are you running?  
I’m using "uglify boot.js -m -c”, I just timed it on mine and it’s mangled the 
qxt app in 11 seconds (I’m using uglify 2.6.1)  Still not great but better than 
30 secs :)  I’ve nearly got Uglify done, but stopped for dinner and then saw 
your email so switched back.

I’ve done the #! entries too

I’ve pushed a new release, give it a go :)

John

From:  Dimitri <mi...@cargosoft.ru>
Reply-To:  qooxdoo Development <qooxdoo-devel@lists.sourceforge.net>
Date:  Wednesday, 17 February 2016 at 19:33
To:  <qooxdoo-devel@lists.sourceforge.net>
Subject:  Re: [qooxdoo-devel] QxCompiler - add ES6, faster compilation, and 
100% Javascript API to building applications

Just a quick follow-up on Babel - I've rolled back to yesterday's version, 
edited lib/qxcompiler/ClassFile.js:218, replaced that plugins array with 
presets: [ "es2015" ]. Suddenly, it worked :)
I'm still wondering why it doesn't try to look for any .babelrc file. It's 
clearly stated in the docs that the "babelrc" option is true by default. And it 
definitely would be good to have control over Babel via (optional) config file.

Another issue to consider is that not every ES6 feature is implemented via code 
transformation. Some (ex., Promises) require babel-polyfill. (Mention in the 
docs? Integrate polyfill into build?)

Dimitri

Hi John,

That pace you're keeping, it's incredible :) Glad to hear translations finally 
landed!

Unfortunately, I couldn't make them work :(

[mitya@localhost test]$ node compile-app-demo.js 
[BABEL] Note: The code generator has deoptimised the styling of 
"/home/mitya/qxcompiler/qooxdoo/framework/source/class/qx/ui/core/Widget.js" as 
it exceeds the max of "100KB".
2016-02-17 21:30:13.229 [info ] makers          Writing target Source Target: 
../testdata/qxt/source-output/
/home/mitya/qxcompiler/lib/qxcompiler/targets/Target.js:239
              pkgdata.locales["C"] = db.cldr["en"];
                                            ^

TypeError: Cannot read property 'en' of undefined
    at /home/mitya/qxcompiler/lib/qxcompiler/targets/Target.js:239:45
    at /home/mitya/qxcompiler/node_modules/async/lib/async.js:718:13
    at async.forEachOf.async.eachOf 
(/home/mitya/qxcompiler/node_modules/async/lib/async.js:233:13)
    at _parallel (/home/mitya/qxcompiler/node_modules/async/lib/async.js:717:9)
    at Object.async.parallel 
(/home/mitya/qxcompiler/node_modules/async/lib/async.js:731:9)
    at /home/mitya/qxcompiler/lib/qxcompiler/targets/Target.js:236:15
    at /home/mitya/qxcompiler/lib/util.js:321:9
    at /home/mitya/qxcompiler/node_modules/async/lib/async.js:52:16
    at /home/mitya/qxcompiler/node_modules/async/lib/async.js:269:32
    at /home/mitya/qxcompiler/node_modules/async/lib/async.js:44:16

(removed qxcompiler dir & did clean checkout, didn't help either)

Re: Babel - sadly, didn't make it work either :( that arrow function in 
qxt/Application.js goes unchanged first to [source|build]-output/transpiled, 
then to [source|build]-output/script. The same with string templates, etc. Note 
the above [BABEL] message - that means, Babel is invoked, but doesn't apply any 
actual transformations. I tried "strace -e trace=open node 
compile-app-demo.js", and didn't see it open .babelrc or any plugin and/or 
preset modules. Could you please make sure it's indeed enabled? If it works for 
you, could you please assist me in tracing/debugging (since I'm a newbie in a 
Node world)?

As for script compression, I played a bit with the standalone uglify tool. 
Works pretty fine, but it takes ~30 seconds to process a skeleton app. Do you 
think it can be sped up if integrated into QxCompiler?

Minor issue: test/*.js scripts could have a shebang string (#!/usr/bin/node) 
and +x mode so that they could be run directly, without typing "node ..." each 
time.

Cheers!
Dimitri
------------------------------------------------------------------------------ 
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + 
Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end 
web transactions and take corrective actions now Troubleshoot faster and 
improve end-user experience. Signup Now! 
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140_______________________________________________
 qooxdoo-devel mailing list 
qooxdoo-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------ 
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + 
Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end 
web transactions and take corrective actions now Troubleshoot faster and 
improve end-user experience. Signup Now! 
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140_______________________________________________
 qooxdoo-devel mailing list 
qooxdoo-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------ 
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + 
Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end 
web transactions and take corrective actions now Troubleshoot faster and 
improve end-user experience. Signup Now! 
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140_______________________________________________
 qooxdoo-devel mailing list 
qooxdoo-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------ 
Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + 
Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end 
web transactions and take corrective actions now Troubleshoot faster and 
improve end-user experience. Signup Now! 
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140_______________________________________________
 qooxdoo-devel mailing list qooxdoo-devel@lists.sourceforge.net 
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to