#javascript #angularjs #gulp #uglifyjs
#javascript #angularjs #глоток #uglifyjs
Вопрос:
При попытке использовать gulp-ugily
с моим угловым приложением оно ломается, хотя я его прогоняю gulp-ngmin
.
Вот файл gulp:
var gulp = require('gulp'),
concat = require('gulp-concat'),
ngmin = require('gulp-ngmin'),
uglify = require('gulp-uglify');
gulp.task('compress', function() {
gulp.src('client/js/source/*.js')
.pipe(concat('app.js'))
.pipe(ngmin())
.pipe(uglify())
.pipe(gulp.dest('client/js'));
});
Комментарии:
1. Как это происходит? Какие-либо подсказки из сообщений об ошибках?
2. Аргумент ‘MyController’ не является функцией, не определен. В основном контроллер.
3. Вау, мне нужно было указать
client/js/source/**/*.js
, есть ли способ указать просто поиск в обратном порядке?4. Убедитесь, что вы определили свои зависимости максимально безопасным способом. Должно быть в фигурных скобках, таких как: phonecatApp.controller(‘PhoneListCtrl’, [‘$scope’, ‘$http’, function($scope, $ http) {…}]);. См . docs.angularjs.org/tutorial/step_05 и прокрутите вниз раздел «Примечания по минимизации».
Ответ №1:
Это помогает отключить опцию искажения в uglify, поскольку она мешает всем элементам внедрения и именованию.
.pipe(uglify({ mangle: false }))
Ответ №2:
Возможно, отвечая на это для будущих пользователей, поскольку кажется, что сообщение старое.
Используйте ng-annotate для устранения проблем AngularJS при уродстве. Установите его как любую другую библиотеку:
npm install gulp-ng-annotate --save-dev
А затем используйте это в своем gulpfile.js:
var gulp = require('gulp')
var concat = require('gulp-concat')
var uglify = require('gulp-uglify')
var ngAnnotate = require('gulp-ng-annotate')
gulp.task('js', function () {
gulp.src(['src/**/module.js', 'src/**/*.js'])
.pipe(concat('app.js'))
.pipe(ngAnnotate())
.pipe(uglify())
.pipe(gulp.dest('.'))
})
Надеюсь, это помогло!
Источник: https://medium.com/@dickeyxxx/best-practices-for-building-angular-js-apps-266c1a4a6917
Комментарии:
1. Я использую это решение на работе, и оно никогда меня не подводило! Спасибо @PhamHuyAnh!
2. да! рабочий ответ. должно быть принято как правильный ответ.
3. Для меня это звучит лучшим решением, потому что .js более уродливы, чем с решением ‘mangle: false’.
4. Примечание: При использовании ES6 у вас могут возникнуть проблемы с ngAnnotate, поскольку он больше не поддерживается. Например, добавление ES6 spread (‘…’) вызовет ошибку синтаксического анализа.
5. Я согласен @Zymotik! Решение было действительно для Angular 1.x в июне 2016 года! Это решение должно быть пересмотрено! =) Но я думаю, что веб-пакеты поняли это для многих языков