Webpack, angular и ng-annotate-loader - проблемы с аннотированием угловых файлов

Я пытаюсь связать приложение Angular с помощью Webpack и у меня возникают проблемы после минимизации пакета. Этот синтаксис с ручной аннотацией зависимостей работает:

var app = angular.module('app', [
    'ui.router'
])
.config(['$locationProvider', '$stateProvider', ($locationProvider, $stateProvider) => {
    $locationProvider.html5Mode(true);
    $stateProvider
        .state('root', {
            url: '/',
            views: {
                '': {
                    template: '<p>Hello!</p>'
                }
            }
        });
}]);

в то время как этот синтаксис производит $injector:modulerr ошибка:

var app = angular.module('app', [
    'ui.router'
])
.config(($locationProvider, $stateProvider) => {
    $locationProvider.html5Mode(true);
    $stateProvider
        .state('root', {
            url: '/',
            views: {
                '': {
                    template: '<p>Hello!</p>'
                }
            }
        });
});

Я использую ng-annotate-loader для Webpack. Вот соответствующая часть файла конфигурации:

module: {
    loaders: [
        {
            test: /\.js$/,
            exclude: /node_modules/,
            loader: 'ng-annotate!babel?stage=1'
        },

Но это не исправляет [$injector:modulerr] ошибка. Пытался изменить loader: 'ng-annotate!babel?stage=1' линия с loaders: ['ng-annotate', 'babel?stage=1']без улучшения. Не могли бы вы предложить, как я мог это исправить?

РЕДАКТИРОВАТЬ: в конце концов обнаружил, что мой вопрос в основном дубликат Angular нг аннотации не работает с Babel

РЕДАКТИРОВАТЬ 2: Мне было указано, что ng-annotate не удалось аннотировать.config углового модуля, потому что я импортировал angular как модуль es6 вместо того, чтобы объявлять его как переменную, что явно путало ng-annotate.

1 ответ

Хорошо, что я в конечном итоге нашел в Readme ng-annotate, что строка 'ngInject'; при размещении внутри функции может показать ng-annotate какую функцию аннотировать.

Я попробовал это с моей настройкой, и это сработало.

Но было бы замечательно настроить загрузчик ng-annotate-loader таким образом, чтобы не требовались такие посторонние строки маркеров внутри функций.

PS: часть Edit2 моего вопроса содержит возможный ответ - в моем случае, статический анализатор ng-annotate стал недоволен, потому что angular был импортирован как модуль ES6, а не объявлен как переменная require синтаксис.

Другие вопросы по тегам