Uglifyjs: 2.8.25 produces an error in React Native build

Created on 15 May 2017  路  14Comments  路  Source: mishoo/UglifyJS

Bug report?

ES6+ input
ES6+ input

Uglify version (uglifyjs -V)
2.8.25

The uglifyjs CLI command executed or minify() options used.
minify()

JavaScript output or error produced.

Unexpected token: keyword (default)

React Native build produces an error with latest build 2.8.25:

Unexpected token: keyword (default)
:app:bundleReleaseJsAndAssets FAILED
bug

Most helpful comment

@alexlamsl I believe in you! https://www.youtube.com/watch?v=btPJPFnesV4

All 14 comments

uglify-js 2.8.25 does not work with ES6 - try uglify-es instead?

@alexlamsl ok. I was wrong - input es5. Code transpiled with babel.

__d(/* @expo/ex-navigation/src/ExNavigation.js */function(global, require, module, exports) {Object.defineProperty(exports,"__esModule",{value:true});exports.AndroidBackButtonBehavior=exports.getBackButtonManager=exports.createFocusAwareComponent=exports.withNavigation=exports.createRouter=exports.NavigationStyles=exports.NavigationReducer=exports.NavigationActionTypes=exports.NavigationActions=exports.createNavigationEnabledStore=exports.SharedElement=exports.SharedElementGroup=exports.SharedElementOverlay=exports.NavigationBar=exports.DrawerNavigationItem=exports.DrawerNavigation=exports.SlidingTabNavigationItem=exports.SlidingTabNavigation=exports.TabBadge=exports.TabBar=exports.TabNavigationItem=exports.TabNavigation=exports.StackNavigationItem=exports.StackNavigation=exports.NavigationContext=exports.NavigationProvider=undefined;var _ExNavigationProvider=require(441                     );Object.defineProperty(exports,"NavigationProvider",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationProvider). // 441 = ./ExNavigationProvider\n\n\n\ndefault;}});var _ExNavigationContext=require(447                    );Object.defineProperty(exports,"NavigationContext",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationContext). // 447 = ./ExNavigationContext\ndefault;}});var _ExNavigationStack=require(495                  );Object.defineProperty(exports,"StackNavigation",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationStack). // 495 = ./ExNavigationStack\n\ndefault;}});var _ExNavigationStackItem=require(515                      );Object.defineProperty(exports,"StackNavigationItem",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationStackItem). // 515 = ./ExNavigationStackItem\ndefault;}});var _ExNavigationTab=require(524                    );Object.defineProperty(exports,"TabNavigation",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationTab). // 524 = ./tab/ExNavigationTab\n\ndefault;}});var _ExNavigationTabItem=require(529                        );Object.defineProperty(exports,"TabNavigationItem",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationTabItem). // 529 = ./tab/ExNavigationTabItem\ndefault;}});var _ExNavigationTabBar=require(527                       );Object.defineProperty(exports,"TabBar",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationTabBar). // 527 = ./tab/ExNavigationTabBar\ndefault;}});var _ExNavigationBadge=require(528                  );Object.defineProperty(exports,"TabBadge",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationBadge). // 528 = ./ExNavigationBadge\ndefault;}});var _ExNavigationSlidingTab=require(530                                   );Object.defineProperty(exports,"SlidingTabNavigation",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationSlidingTab). // 530 = ./sliding-tab/ExNavigationSlidingTab\n\n\ndefault;}});var _ExNavigationSlidingTabItem=require(531                                       );Object.defineProperty(exports,"SlidingTabNavigationItem",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationSlidingTabItem). // 531 = ./sliding-tab/ExNavigationSlidingTabItem\n\n\ndefault;}});var _ExNavigationDrawer=require(540                          );Object.defineProperty(exports,"DrawerNavigation",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationDrawer). // 540 = ./drawer/ExNavigationDrawer\n\n\ndefault;}});var _ExNavigationDrawerItem=require(544                              );Object.defineProperty(exports,"DrawerNavigationItem",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationDrawerItem). // 544 = ./drawer/ExNavigationDrawerItem\n\ndefault;}});var _ExNavigationBar=require(481                );Object.defineProperty(exports,"NavigationBar",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationBar). // 481 = ./ExNavigationBar\n\n\ndefault;}});var _ExNavigationSharedElementOverlay=require(522                                                );Object.defineProperty(exports,"SharedElementOverlay",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationSharedElementOverlay). // 522 = ./shared-element/ExNavigationSharedElementOverlay\n\n\ndefault;}});var _ExNavigationSharedElementGroup=require(521                                              );Object.defineProperty(exports,"SharedElementGroup",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationSharedElementGroup). // 521 = ./shared-element/ExNavigationSharedElementGroup\n\n\ndefault;}});var _ExNavigationSharedElement=require(545                                         );Object.defineProperty(exports,"SharedElement",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationSharedElement). // 545 = ./shared-element/ExNavigationSharedElement\n\n\ndefault;}});var _ExNavigationStore=require(448                  );Object.defineProperty(exports,"createNavigationEnabledStore",{enumerable:true,get:function get(){return _ExNavigationStore. // 448 = ./ExNavigationStore\n\n\ncreateNavigationEnabledStore;}});var _ExNavigationActions=require(443                    );Object.defineProperty(exports,"NavigationActions",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationActions). // 443 = ./ExNavigationActions\n\ndefault;}});var _ExNavigationActionTypes=require(444                        );Object.defineProperty(exports,"NavigationActionTypes",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationActionTypes). // 444 = ./ExNavigationActionTypes\ndefault;}});var _ExNavigationReducer=require(449                    );Object.defineProperty(exports,"NavigationReducer",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationReducer). // 449 = ./ExNavigationReducer\ndefault;}});var _ExNavigationRouter=require(473                   );Object.defineProperty(exports,"createRouter",{enumerable:true,get:function get(){return _ExNavigationRouter. // 473 = ./ExNavigationRouter\n\n\n\ncreateRouter;}});var _ExNavigationComponents=require(484                       );Object.defineProperty(exports,"withNavigation",{enumerable:true,get:function get(){return _ExNavigationComponents. // 484 = ./ExNavigationComponents\n\nwithNavigation;}});Object.defineProperty(exports,"createFocusAwareComponent",{enumerable:true,get:function get(){return _ExNavigationComponents.\ncreateFocusAwareComponent;}});var _ExNavigationBackButtonManager=require(446                              );Object.defineProperty(exports,"getBackButtonManager",{enumerable:true,get:function get(){return _ExNavigationBackButtonManager. // 446 = ./ExNavigationBackButtonManager\n\n\ngetBackButtonManager;}});var _ExNavigationAndroidBackButtonBehavior=require(546                                      );Object.defineProperty(exports,"AndroidBackButtonBehavior",{enumerable:true,get:function get(){return babelHelpers.interopRequireDefault(_ExNavigationAndroidBackButtonBehavior). // 546 = ./ExNavigationAndroidBackButtonBehavior\n\n\ndefault;}});var _ExNavigationStyles=require(516                   );var _NavigationStyles=babelHelpers.interopRequireWildcard(_ExNavigationStyles);exports.NavigationStyles=_NavigationStyles; // 516 = ./ExNavigationStyles\n}, 440);

@isnifer no worries. Looking at your input though, these things look odd:

.interopRequireDefault(_ExNavigationBar). // 481 = ./ExNavigationBar\n\n\ndefault;}})

I don't see how that can be valid JavaScript? I believe one of these are causing Unexpected token: keyword (default) as you reported above.

These are technically valid, but may point to potential problem with the transpiled result:

var _ExNavigationStore=require(448                  );

@alexlamsl just checked this code in 2.8.24 - everything is OK. Something wrong in 2.8.25 :(

I _think_ those \n in your example above are supposed to be actual line breaks, because then I can see uglify-js fail while acorn seems to be doing okay:

$ uglifyjs test.js
Parse error at ..\test.js:5,0
default;}});var _ExNavigationContext=require(447                    );Object.def
^
ERROR: Unexpected token: keyword (default)

$ uglifyjs test.js -p acorn
__d(function(global,require,module,exports){Object.defineProperty(exports,"__esModule",{v...

@isnifer I believe you :wink:

But I do need a test case I can reproduce the issue in order to track down and fix stuff.

@alexlamsl my friend create a repo with problem https://github.com/itsmepetrov/uglify-issue

$ cat test.js
foo. // comment
default;
$ uglifyjs -V
uglify-js 2.7.5

$ uglifyjs test.js
foo.default;



md5-b9b24bc1e9834a3e3f2fbe28ea401e44



$ bin/uglifyjs -V
3.0.5

$ bin/uglifyjs test.js
Parse error at test.js:2,0
default;
^
ERROR: Unexpected token: keyword (default)

@kzc thanks - my effort to reduce this failed because I wasn't using a keyword:

var a = {b: 1}
console.log(a. // comment
.b);

Will proceed to fix this now.

Regression occurred in 4027a0c962b266f72b303e9367a6bad430097f59

Specifically, the as_name() changes:

https://github.com/mishoo/UglifyJS2/commit/4027a0c962b266f72b303e9367a6bad430097f59#diff-9f97a9c36fbbfb0d19068d6fae3bb84eR1374

So I think we need to restore that switch (tmp.type), but add an extra check for case "operator": like we do a few lines up with as_property_name()

@alexlamsl I believe in you! https://www.youtube.com/watch?v=btPJPFnesV4

uglify-js 2.8.26 has been released.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

hacdias picture hacdias  路  5Comments

uiteoi picture uiteoi  路  5Comments

neverfox picture neverfox  路  4Comments

diegocr picture diegocr  路  3Comments

buu700 picture buu700  路  5Comments