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
синтаксис.