Hi Harbs, no, I think that warnings was already appearing before that changes. So seems GCC is still complaining and throwing warnings
El mar., 16 jul. 2019 a las 17:58, Harbs (<harbs.li...@gmail.com>) escribió: > These warnings look new: > > Jul 16, 2019 6:55:16 PM com.google.javascript.jscomp.LoggerErrorManager > println > WARNING: externs/dialogPolyfill.js:15: WARNING - accessing name > dialogPolyfill in externs has no effect. Perhaps you forgot to add a var > keyword? > dialogPolyfill = function() { > ^^^^^^^^^^^^^^ > > Jul 16, 2019 6:55:16 PM com.google.javascript.jscomp.LoggerErrorManager > println > WARNING: externs/dialogPolyfill.js:15: WARNING - variable dialogPolyfill > is undeclared > dialogPolyfill = function() { > ^^^^^^^^^^^^^^ > > Jul 16, 2019 6:55:16 PM com.google.javascript.jscomp.LoggerErrorManager > println > WARNING: externs/dialogPolyfill.js:23: WARNING - name dialogPolyfill is > not defined in the externs. > dialogPolyfill.registerDialog = function(dialog) { > ^^^^^^^^^^^^^^ > > Jul 16, 2019 6:55:16 PM com.google.javascript.jscomp.LoggerErrorManager > println > WARNING: externs/hljs.js:19: WARNING - accessing name hljs in externs has > no effect. Perhaps you forgot to add a var keyword? > hljs = function() { > ^^^^ > > Jul 16, 2019 6:55:16 PM com.google.javascript.jscomp.LoggerErrorManager > println > WARNING: externs/hljs.js:19: WARNING - variable hljs is undeclared > hljs = function() { > ^^^^ > > Jul 16, 2019 6:55:16 PM com.google.javascript.jscomp.LoggerErrorManager > println > WARNING: externs/hljs.js:27: WARNING - name hljs is not defined in the > externs. > hljs.highlightBlock = function(block) { > ^^^^ > > Any thoughts on this? > > > On Jul 15, 2019, at 10:32 PM, Josh Tynjala <joshtynj...@bowlerhat.dev> > wrote: > > > > Hey folks, > > > > I just pushed some commits to royale-compiler and royale-asjs, and I > wanted > > to add a little explanation, and some possible troubleshooting advice if > > anything seems to have broken in your apps. > > > > My work over the last week has been to fix an issue related to specifying > > dependencies when compiling libraries for JS. As you probably know, the > > compiler supports two options for adding libraries as dependencies, > > library-path and external-library-path. The library-path compiler option > > basically says "include all classes that I use from this SWC in the final > > output". It's typically what you use when compiling an app that uses a > > library. The external-library-path compiler option basically says "if I > use > > anything from this SWC, check that I'm using the types correctly, but > don't > > include any of classes from this SWC in the final output". > > > > If you're compiling an app, you typically use library-path for > everything. > > You use external-library-path only for dependencies like > > playerglobal.swc/airglobal.swc in Flash or typedef SWCs in JS. Basically, > > for an app project, external-library-path is for classes that are > provided > > natively by the Flash runtime or a web browser, like Chrome or Firefox. > > > > When compiling libraries, external-library-path is also used to prevent > the > > compiler from creating a "fat" library that stuffs in all of the > > dependencies. Let's say that you have a library, A.swc. It provides some > > core functionality that is needed by both B.swc and C.swc. When we > compile > > B.swc and C.swc, we don't want the classes from A.swc duplicated in both > of > > them. So we add A.swc to the external-library-path when compiling B.swc > or > > C.swc. Then, if you use those SWCs when compiling an app, you need to add > > A.swc, B.swc, and C.swc to the library-path. > > > > To put that in Royale terms, A.swc is something like LanguageJS.swc or > > CoreJS.swc. They're some of our lowest-level SWCs in the framework. B.swc > > and C.swc are more like BasicJS.swc or JewelJS.swc, and they tend to > share > > multiple classes from the lower-level stuff. > > > > Up until now, library-path and external-library-path were a little quirky > > when compiling to JS. It was related to the goog.provide() and > > goog.require() calls that you might have seen in the generated JS. These > > are from the module system that we use in Royale. The compiler didn't > know > > how to differentiate between classes that had goog.provide() and classes > > that were typedefs for JS libraries. It treated everything on the > > external-library-path as a typedef, and this led to missing > goog.require() > > calls in the generated JS. To work around this, when we specified > > dependencies in our framework SWCs, we used library-path to ensure that > > goog.require() would be used. > > > > This workaround of using library-path led to "fat" SWCs that contained > all > > of their dependencies. Low-level classes in SWCs like CoreJS were > > duplicated in higher-level SWCs. This led to the compiler getting > confused > > about exactly where a class was defined. > > > > This has resulted in some minor issues here and there, but nothing too > > major until recently. However, Harbs noticed the other day that it caused > > the compiler to copy extra default CSS into apps from SWCs that you may > not > > have been using. So, you might build an app with the Basic components, > but > > you'd get extra CSS from Jewel or MaterialDesignLite. This could mess up > > your app's styling pretty dramatically. > > > > I updated the compiler to better detect when a class needs goog.require() > > and when it's a typedef. If that class comes from a SWC, the compiler > knows > > to check for an included file like, js/out/com/example/MyClass.js. If the > > generated JS is there, goog.require() is necessary. If it's missing, it's > > treated as a typedef class instead. If the class is an .as source file > > instead, the compiler looks for the @externs asdoc tag to determine if > it's > > a typedef class (and everything else needs goog.require() instead). > > > > By the way, if we ever support other module systems, it shouldn't be too > > difficult to extend this code to detect different SWC layouts for each > > module system. > > > > If your project is an app, this change should not cause any problems. > > You're probably using library-path and external-library-path correctly. > > > > If you have a project that is a library, you should check your compiler > > options to see if you are using library-path and external-library-path > > correctly. If your library depends on another library, you probably > should > > be using external-library-path because you don't want a "fat" SWC. In > other > > words, if you're using library-path in a library project, you probably > need > > to change that to external-library-path. > > > > If you have any custom typedef SWCs, you may want to recompile them. At > one > > point, the compiler had a bug where classes in typedef SWCs were being > > incorrectly added to the "js/out" folder in the SWC, but that was > > incorrect. They should have been placed in an "externs" folder instead. > The > > compiler handles this correctly now, but old typedef SWCs may look like > > goog.require() SWCs instead. To be sure, you can open a SWC file in any > > program that can read ZIP files, and you'll see the internal folder > > structure. If a typedef SWC has a "js/out" folder, it's not going to work > > properly. > > > > If you're working directly out of the royale-compiler and royale-asjs Git > > repos, be sure to update and rebuild them both. The nightly builds should > > be updated shortly. > > > > When you build any apps, be sure to clean first, just to be sure that you > > have the latest JS files from the SWCs. > > > > If you run into any other problems with these changes, please let me > know. > > I'll get them fixed right away! > > > > -- > > Josh Tynjala > > Bowler Hat LLC <https://bowlerhat.dev> > > -- Carlos Rovira http://about.me/carlosrovira