flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Harbs <harbs.li...@gmail.com>
Subject Re: Avoiding goog renaming
Date Sun, 11 Dec 2016 18:28:54 GMT
I DO want renaming.

My point is that we really need to have an option to disable renaming in specific places in
the code.

My example is a very classic case when interop between outside code is going to cause problems.
I CAN’T use class definitions everywhere. There needs to be a method to properly deal with
that.

I don’t have types for JSZip, and create extern files for every use of third party libraries
is not a practical option.

If you read my email you will see I already stated that using quoted strings is the work-around
here, but IMO, it’s not a solution to require client code to always do that.

On Dec 11, 2016, at 5:04 PM, Alex Harui <aharui@adobe.com> wrote:

> There is a compiler option to turn off renaming in the release build if
> you don't care about size.
> 
> IMO, use of * and plain Object is going to result in renaming issues.  Use
> class definitions everywhere.  I've mentioned in the past about a compiler
> warning on use of * and Object to help.  For Object you might also be able
> to use JSON quoted keys.
> 
> HTH,
> -Ales
> 
> On 12/11/16, 2:14 AM, "Harbs" <harbs.lists@gmail.com> wrote:
> 
>> I’ve been spending WAY too much time dealing with goog renaming.
>> 
>> I have a good example of the kind of issues I’ve been dealing with. I
>> think this is an area where Falcon needs to do a better job.
>> 
>> I have some code which looks like this:
>> 
>> 			var JSZip:* = require("jszip");
>> 
>> 			var zip:* = new JSZip();
>> 			var name:String = folderToZip.name;
>> 			recursiveAdd(folderToZip,zip,"");
>> 			var promise:Promise = new Promise(function(resolve:*,reject:*):void{
>> 				var zipFile:File = destinationFolder.resolvePath(folderToZip.name +
>> ".zip");
>> 				var zipStream:Stream  = zip.generateNodeStream(
>> 				{type:'nodebuffer',streamFiles:true}).pipe(
>> 				fs.createWriteStream(zipFile.nativePath));
>> 
>> 				zipStream.on('finish', function ():* {
>>   				// JSZip generates a readable stream with a "end" event,
>>   				// but is piped here in a writable stream which emits a "finish"
>> event.
>>  		 			console.log(zipFile.name + " written.");
>> 						resolve(zipFile);
>> 				});
>> 				zipStream.on('error',function():void{
>> 					console.log("zip error");
>> 					reject("error");
>> 				})
>> 			});
>> 			return promise;
>> 
>> jszip is a Node module I’m using with require().
>> 
>> This code works perfectly in a debug build of my app.
>> 
>> When I run a release build I get an “undefined function” error.
>> 
>> The problematic code is here:
>> 				var zipStream:Stream  = zip.generateNodeStream(
>> 				{type:'nodebuffer',streamFiles:true}).pipe(
>> 				fs.createWriteStream(zipFile.nativePath));
>> 
>> The code gets minified to this:
>> 
>> return new Promise(function(d,f){var
>> h=b.ba(a.name+Zc),k=c.Br({type:yA,Vr:!0}).pipe(fs.createWriteStream(h.nati
>> vePath));k.on(Nw,function(){console.log(h.name+ib);d(h)});k.on(vw,function
>> (){console.log(hI);f(vw)
>> 
>> This is broken on multiple fronts:
>> 1. zip. zip.generateNodeStream is renamed to c.Br. Br is quite obviously
>> not defined.
>> 2. streamFiles is renamed to Vr, so the wrong options are being passed
>> into jszip. I have no idea why streamFiles is being renamed, but type is
>> not.
>> 
>> To fix this you need to do something like this:
>> 
>> 				var zipStream:Stream  = zip["generateNodeStream"](
>> 				{"type":'nodebuffer',"streamFiles":true})["pipe"](
>> 				fs.createWriteStream(zipFile.nativePath));
>> 
>> Which generates:
>> return new Promise(function(d,f){var
>> h=b.ba(a.name+Zc),k=c.generateNodeStream({type:yA,streamFiles:!0}).pipe(fs
>> .createWriteStream(h.nativePath));k.on(Nw,function(){console.log(h.name+ib
>> );d(h)});k.on(vw,function(){console.log(hI);f(vw)})}
>> 
>> I also have no idea why nativePath is not renamed. It’s a property of a
>> class which I defined. It seems like it would be a good candidate for
>> renaming.
>> 
>> We need some kind of annotation in ActionScript code to enable output of
>> annotations for the Google Compiler to know that it’s not okay to rename
>> properties of the objects. I’ve had this problem with object literals
>> that are being sent as well as accessing properties and methods of
>> external objects.
>> 
>> Having manually use bracket notation instead of dot notation is error
>> prone. It would be much better to have Falcon automatically change the
>> notations or annotate the code in such a way that goog does not rename
>> them.
>> 
>> On Dec 6, 2016, at 6:02 PM, Alex Harui <aharui@adobe.com> wrote:
>> 
>>> 
>>> 
>>> On 12/5/16, 11:47 PM, "Harbs" <harbs.lists@gmail.com> wrote:
>>> 
>>>> OK. I guess I’ll rework the definitions into extern js files when I
>>>> have
>>>> time.
>>> 
>>> In theory, if you use FalconJX to cross-compile those AS files, you
>>> should
>>> get the right set of JS files to stick a folder called externs (instead
>>> of
>>> js/out).  The build scripts and settings should be almost the same as
>>> how
>>> we build the framework SWCs.
>>> 
>>> HTH,
>>> -Alex
>>> 
>> 
> 


Mime
View raw message