google / google/closure-compiler

Grunt files src argument changes order with each build, skips files

Open
#2,361 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
7.7k
Forks
1.2k
Avg merge
2d 12h
Merged PRs (30d)
6

Description

When using the [grunt plugin](https://www.npmjs.com/package/google-closure-compiler), I find that the `files -> src` argument has an unpredictable and inconsistent ordering of files, and some files are just plain missing. This is seen from looking at the manifest that gcc outputs. Not all files are ordered inconsistently, but it seems to affect ones that have similar paths, while others are omitted completely

This issue is not present with the `--js` arguments, but using this argument has less to offer than the grunt files argument.

Confirmed that the output does match the manifest.

gcc version: 20170218.0.0

```javascript
'closure-compiler': {
app: {
files: [
{
dest: 'app/dist/app.js',
src: [
'app/polyfills/*.polyfill.js',
'corporate_components/aoenvWeb/WebContent/public/corp/5.4.0/js/aoinsAnalytics.js',
'plug-ins/angular/1.5.5/angular.js',
'plug-ins/angular-animate/1.5.5/angular-animate.js',
'plug-ins/angular-aria/1.5.5/angular-aria.js',
'plug-ins/angular-route/1.5.5/angular-route.js',
'plug-ins/angular-messages/1.5.5/angular-messages.js',
'plug-ins/angular-sanitize/1.5.5/angular-sanitize.js',
'plug-ins/ng-dialog/3.6/ngDialog.js',
'plug-ins/angular-toastr/angular-toastr.tpls.js',
'plug-ins/angular-cookies/angular-cookies.js',
'plug-ins/angular-ui-utils-mask/mask.js',
'plug-ins/angular-tooltips_0.1.8/src/js/angular-tooltips.js',
'plug-ins/sortable_1.2.1/Sortable.js',
'plug-ins/sortable_1.2.1/ng-sortable.js',
'app/libraries/lodash.min.js',
'app/libraries/xml2json.min.js',
'app/libraries/ui-bootstrap-custom-build/ui-bootstrap-custom-2.0.1.js',
'app/libraries/ui-bootstrap-custom-build/ui-bootstrap-custom-tpls-2.0.1.js',
]
}
],
options: {
compilation_level: 'SIMPLE',
language_in: 'ECMASCRIPT5_STRICT',
output_wrapper: '(function(){\n%output%\n}).call(this)\n//# sourceMappingURL=app.js.map',
output_manifest: 'app/build/gcc-manifest.MF',
}
}
}
```

verbose terminal output:
```
Running "closure-compiler:app" (closure-compiler) task
Verifying property closure-compiler.app exists in config...OK
Files: app/polyfills/string-includes.polyfill.js, corporate_components/aoenvWeb/WebContent/public/corp/5.4.0/js/aoinsAnalytics.js, plug-ins/angular/1.5.5/angular.js, plug-ins/angular-animate/1.5.5/angular-animate.js, plug-ins/angular-aria/1.5.5/angular-aria.js, plug-ins/angular-route/1.5.5/angular-route.js, plug-ins/angular-messages/1.5.5/angular-messages.js, plug-ins/angular-sanitize/1.5.5/angular-sanitize.js, plug-ins/ng-dialog/3.6/ngDialog.js, plug-ins/angular-toastr/angular-toastr.tpls.js, plug-ins/angular-cookies/angular-cookies.js, plug-ins/angular-ui-utils-mask/mask.js, plug-ins/angular-tooltips_0.1.8/src/js/angular-tooltips.js, plug-ins/sortable_1.2.1/Sortable.js, plug-ins/sortable_1.2.1/ng-sortable.js, app/libraries/lodash.min.js, app/libraries/xml2json.min.js, app/libraries/ui-bootstrap-custom-build/ui-bootstrap-custom-2.0.1.js, app/libraries/ui-bootstrap-custom-build/ui-bootstrap-custom-tpls-2.0.1.js -> app/dist/app.js
Options: args=undefined, compilation_level="SIMPLE", language_in="ECMASCRIPT5_STRICT", output_wrapper="(function(){\r\n%output%\r\n}).call(this)\r\n//# sourceMappingURL=app.js.map", output_manifest="app/build/gcc-manifest.MF"
```

Build 1 manifest:
```javascript
/app/polyfills/string-includes.polyfill.js
/corporate_components/aoenvWeb/WebContent/public/corp/5.4.0/js/aoinsAnalytics.js
/plug-ins/angular-aria/1.5.5/angular-aria.js
/plug-ins/angular-animate/1.5.5/angular-animate.js
/plug-ins/angular/1.5.5/angular.js
/plug-ins/angular-cookies/angular-cookies.js
/plug-ins/angular-route/1.5.5/angular-route.js
/plug-ins/angular-messages/1.5.5/angular-messages.js
/plug-ins/angular-toastr/angular-toastr.tpls.js
/plug-ins/angular-sanitize/1.5.5/angular-sanitize.js
```

Build 2 manifest (same args):
```javascript
/app/polyfills/string-includes.polyfill.js
/corporate_components/aoenvWeb/WebContent/public/corp/5.4.0/js/aoinsAnalytics.js
/plug-ins/angular/1.5.5/angular.js
/plug-ins/angular-aria/1.5.5/angular-aria.js
/plug-ins/angular-animate/1.5.5/angular-animate.js
/plug-ins/angular-route/1.5.5/angular-route.js
/plug-ins/angular-messages/1.5.5/angular-messages.js
/plug-ins/angular-sanitize/1.5.5/angular-sanitize.js
/plug-ins/ng-dialog/3.6/ngDialog.js
/plug-ins/angular-cookies/angular-cookies.js
```

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.