google / google/closure-compiler

Cannot use -D for @define constant within a module

Open
#1,601 27 comments 1 reaction 0 assignees View on GitHub
Documentation enhancement ES6 internal-issue-created Modules triage-done
Dominant language
JavaScript
Stars
7.7k
Forks
1.2k
Avg merge
2d 12h
Merged PRs (30d)
6

Description

Repro case:

``` js
// a.js
/** @define {string} */ var FOO = 'default foo';
export function test() { console.log(FOO); }
```

``` js
// b.js
import * as a from './a';
a.test();
```

```
java -jar compiler.jar --js *.js \
--language_in=ECMASCRIPT6_STRICT \
--language_out=ECMASCRIPT5_STRICT \
-D "FOO='hi'";

WARNING - unknown @define variable FOO

0 error(s), 1 warning(s)
'use strict';var module$a={},FOO$$module$a="default foo";function test$$module$a(){console.log(FOO$$module$a)}module$a.test=test$$module$a;module$a.test();
```

Things work if you use the mangled name:

```
java -jar compiler.jar --js *.js \
--language_in=ECMASCRIPT6_STRICT \
--language_out=ECMASCRIPT5_STRICT \
-D "FOO\$\$module\$a='hi'";

'use strict';var module$a={},FOO$$module$a="hi";function test$$module$a(){console.log(FOO$$module$a)}module$a.test=test$$module$a;module$a.test();
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.