Как минимизировать популярный файл без ошибок 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
вкладку в инструментах разработчика и проверьте каждый элемент области видимости, который является функцией.
Это создает более широкую сеть и приводит к большему количеству вещей, которые необходимо проверить; но было необходимо в этом случае, и я подозреваю, что может применяться в других.