google / google/closure-compiler
Grunt files src argument changes order with each build, skips files
- 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
Assessment
This issue has not been assessed yet.