google / google/closure-compiler
CommonJS: symbol not renamed in inline module.exports assignment
- Dominant language
- JavaScript
- Stars
- 7.7k
- Forks
- 1.2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 6
Description
```bash
java -jar closure-compiler-v20191027.jar --version
Closure Compiler (http://github.com/google/closure-compiler)
Version: v20191027
Built on: 2019-10-30 03:56
```
Came across this when running closure compiler on core-js, caused by this file: [zloirock/core-js/internal-metadata.js]( https://github.com/zloirock/core-js/blob/6e3106817aa46919273b80d6f961e75a65967d22/packages/core-js/internals/internal-metadata.js). It contains a `module.exports` assignment within a compound assignment (see at the bottom).
Possibly related to #3093 ?
Minimal example that reproduces this:
```javascript
// /tmp/export-wrong.js
var exp = () => {};
var meta = module.exports = {exp: exp}
```
This currently compiles to:
```bash
java -jar closure-compiler-v20191027.jar --process_common_js_modules=true --entry_point=/tmp/exports-wrong.js --compilation_level=SIMPLE_OPTIMIZATIONS --js /tmp/exports-wrong.js
```
```javascript
var module$tmp$exports_wrong={default:{}};
module$tmp$exports_wrong.default.exp=function(){};
var meta$$module$tmp$exports_wrong=module$tmp$exports_wrong.default={exp:exp};
```
Are these kind of exports supported? When this code is run, `exp` will be undefined. It works correctly when changing the export to a top-level assignment statement:
```javascript
var exp = () => {};
var meta = {exp: exp};
module.exports = meta;
```
Contributor guide
Assessment
This issue has not been assessed yet.