Bug 1441617 - Use ES6 imports for angular module dependencies

An AngularJS module declares a dependency on another module like so:
```
const fooModule = angular.module('foo', ['name_of_dep_module']);
```

This is suboptimal, since:
a) the dependency is only validated at runtime not during the build
b) the module name often doesn't match the NPM package name, making
   it hard to know whether imports are unused.

As such, many AngularJS packages now export a string containing the
module name, which allows for an ES6-like approach (it still uses
globals underneath, but better than nothing):
```
import nameOfDepModule from 'dep-module';

const fooModule = angular.module('foo', [nameOfDepModule]);
```

Just to complicate things, some modules don't export the module name,
but the actual module object itself. This can't be passed to
`angular.module()` directly, so for these modules we have to use the
`name` property on the module instead:
https://docs.angularjs.org/api/ng/type/angular.Module#name

eg:
```
import depModuleObject from 'awkward-dep-module';

const fooModule = angular.module('foo', [depModuleObject.name]);
```

In fact, the treeherder modules do just that - however its not worth
fixing, since otherwise we'd have to change every file that registers
directives/filters/values/... to fetch the module first, using
`angular.module('name-of-existing-module')`.
This commit is contained in:
Ed Morley 2018-02-28 13:54:36 +00:00
Родитель 3e2e22e132
Коммит a8e09c5786
9 изменённых файлов: 38 добавлений и 44 удалений

Просмотреть файл

@ -9,16 +9,7 @@ window.angular = require('angular');
window.React = require('react'); window.React = require('react');
require('jasmine-jquery'); require('jasmine-jquery');
require('angular-mocks'); require('angular-mocks');
require('angular-resource');
require('angular-route');
require('angular-sanitize');
require('angular-local-storage');
require('angular-toarrayfilter');
require('mousetrap'); require('mousetrap');
require('ngreact');
require('angular1-ui-bootstrap4');
require('angular-marked');
require('../../../ui/vendor/resizer.js');
const Adapter = require('enzyme-adapter-react-16'); const Adapter = require('enzyme-adapter-react-16');
const Enzyme = require('enzyme'); const Enzyme = require('enzyme');

Просмотреть файл

@ -17,18 +17,9 @@ require('./css/treeherder-loading-overlay.css');
// Vendor JS // Vendor JS
require('angular'); require('angular');
require('angular-route');
require('angular-resource');
require('angular-sanitize');
require('angular-toarrayfilter');
require('angular-local-storage');
require('bootstrap/dist/js/bootstrap'); require('bootstrap/dist/js/bootstrap');
require('angular1-ui-bootstrap4');
require('mousetrap'); require('mousetrap');
require('angular-marked');
require('ngreact');
require('jquery.scrollto'); require('jquery.scrollto');
require('./vendor/resizer.js');
// Bootstrap the Angular modules against which everything will be registered // Bootstrap the Angular modules against which everything will be registered
require('./js/treeherder_app.js'); require('./js/treeherder_app.js');

Просмотреть файл

@ -9,12 +9,7 @@ require('./css/logviewer.css');
// Vendor JS // Vendor JS
require('angular'); require('angular');
require('angular-route');
require('angular-resource');
require('angular-sanitize');
require('angular-local-storage');
require('bootstrap/dist/js/bootstrap'); require('bootstrap/dist/js/bootstrap');
require('./vendor/resizer.js');
// Bootstrap the Angular modules against which everything will be registered // Bootstrap the Angular modules against which everything will be registered
require('./js/logviewer.js'); require('./js/logviewer.js');

Просмотреть файл

@ -12,14 +12,8 @@ require('metrics-graphics/dist/metricsgraphics.css');
// Vendor JS // Vendor JS
require('angular'); require('angular');
require('angular-resource');
require('angular-ui-router');
require('angular-sanitize');
require('angular-local-storage');
require('mousetrap'); require('mousetrap');
require('bootstrap/dist/js/bootstrap'); require('bootstrap/dist/js/bootstrap');
require('angular1-ui-bootstrap4');
require('angular-clipboard');
// The official 'flot' NPM package is out of date, so we're using 'jquery.flot' // The official 'flot' NPM package is out of date, so we're using 'jquery.flot'
// instead, which is identical to https://github.com/flot/flot // instead, which is identical to https://github.com/flot/flot
require('jquery.flot'); require('jquery.flot');

Просмотреть файл

@ -1,4 +1,6 @@
const logViewerApp = angular.module('logviewer', ['treeherder']); import treeherderModule from './treeherder';
const logViewerApp = angular.module('logviewer', [treeherderModule.name]);
logViewerApp.config(['$compileProvider', '$locationProvider', '$resourceProvider', logViewerApp.config(['$compileProvider', '$locationProvider', '$resourceProvider',
function ($compileProvider, $locationProvider, $resourceProvider) { function ($compileProvider, $locationProvider, $resourceProvider) {

Просмотреть файл

@ -1,6 +1,12 @@
import angularClipboardModule from 'angular-clipboard';
import uiBootstrap from 'angular1-ui-bootstrap4';
import uiRouter from 'angular-ui-router';
import treeherderModule from './treeherder';
export default angular.module('perf', [ export default angular.module('perf', [
'ui.router', uiRouter,
'ui.bootstrap', uiBootstrap,
'treeherder', treeherderModule.name,
'angular-clipboard', angularClipboardModule.name,
]); ]);

Просмотреть файл

@ -1,5 +1,9 @@
import ngResource from 'angular-resource';
import ngSanitize from 'angular-sanitize';
import LocalStorageModule from 'angular-local-storage';
export default angular.module('treeherder', [ export default angular.module('treeherder', [
'ngResource', ngResource,
'ngSanitize', ngSanitize,
'LocalStorageModule', LocalStorageModule,
]); ]);

Просмотреть файл

@ -1,11 +1,20 @@
import angularToArrayfilter from 'angular-toarrayfilter';
import hcMarked from 'angular-marked';
import ngReactModule from 'ngreact';
import ngRoute from 'angular-route';
import uiBootstrap from 'angular1-ui-bootstrap4';
import mcResizer from '../vendor/resizer';
import treeherderModule from './treeherder';
const treeherderApp = angular.module('treeherder.app', [ const treeherderApp = angular.module('treeherder.app', [
'treeherder', treeherderModule.name,
'ui.bootstrap', uiBootstrap,
'ngRoute', ngRoute,
'mc.resizer', mcResizer,
'angular-toArrayFilter', angularToArrayfilter,
'react', ngReactModule.name,
'hc.marked', hcMarked,
]); ]);
treeherderApp.config(['$compileProvider', '$locationProvider', '$routeProvider', '$httpProvider', treeherderApp.config(['$compileProvider', '$locationProvider', '$routeProvider', '$httpProvider',

2
ui/vendor/resizer.js поставляемый
Просмотреть файл

@ -42,3 +42,5 @@ angular.module('mc.resizer', []).directive('resizer', ['$document', function($do
} }
}; };
}]); }]);
export default 'mc.resizer';