Как минимизировать популярный файл без ошибок DI?

Я сталкиваюсь с некоторыми проблемами со знаменитым ангулярным при минимизации.

Несколько PR, которые я представил вчера, были попытками исправить это, но они, похоже, не решили проблему.

При сборке без минификации все работает как положено.

Когда приложение построено с минификацией, но удаляет зависимость от "known.angular" из модуля моего приложения, приложение постепенно изменится до углового, поэтому макет будет разбит, но основное угловое приложение работает, как и ожидалось, без ошибок.

Если приложение построено с минификацией, а модуль приложения зависит от файла "known.angular", приложение вообще не загружается со следующей ошибкой:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:modulerr] Failed to instantiate module famous.angular due to:
Error: [$injector:unpr] Unknown provider: t
http://errors.angularjs.org/1.2.23/$injector/u...<omitted>...2)

Используя этот метод, я смог определить, какая функция не была правильно минифицирована, и активировать внедрение зависимостей Angular:

function LocationHashbangInHtml5Url(appBase, hashPrefix) { /* ... */ }

Это в основном угловом файле - angular.jsи это действительно минимизирует правильно в других случаях. Так что я не уверен, почему, когда я включаю "known.angular" в свой модуль приложения, это приводит к ошибке.

Кто-нибудь знает, что здесь не так?


Демо проблемы:

git clone git@github.com:bguiz/browserify-gulp-starter.git
cd browserify-gulp-starter
npm install famous
bower install --save angular angular-route famous-angular
# edit gulpoptions.js
# appName: 'app',
# appFolder: './src-famousangular/app/',
gulp serve-dist

1 ответ

Я представил эти два PR ранее известному ангуляру, думая, что поймал все $inject сценарии:

Оказывается, что был третий, который я пропустил, и теперь представил патч для:

В моем вопросе выше я сказал function LocationHashbangInHtml5Url(appBase, hashPrefix) { /* ... */ } в angular/angular.js была функция, которая не минимизировала правильно. Это было неверно, и виновник был на самом деле поставщиком в famous-angular/src/scripts/directives/fa-input.js,


Для любопытных, вот процесс, который я использовал, чтобы понять выше. В качестве дополнительного бонуса я обнаружил дополнительный метод, который можно использовать при отладке ошибок внедрения зависимостей в минимизированных приложениях AngularJs.

Оказывается, что метод, на который я ссылался выше ( /questions/27063652/otladka-neizvestnogo-postavschika-v-minimizirovannom-uglovom-javascript/27063656#27063656) , не всегда работает правильно.

Что в итоге сработало, так это пройти через стек выполнения, пока мы не доберемся до invoke() функция, как описано в этой технике. Тогда вместо проверки только fnпосмотри в Scope Variables вкладку в инструментах разработчика и проверьте каждый элемент области видимости, который является функцией.

Это создает более широкую сеть и приводит к большему количеству вещей, которые необходимо проверить; но было необходимо в этом случае, и я подозреваю, что может применяться в других.

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