artgrosvil
@artgrosvil
#dev #programming #student #startups #chill

Как упорядочить файлы в grunt-contrib-concat?

Здравствуйте, использую grunt-contrib-concat для grunt. Проблема в том, что он соединяет файлы не по порядку, а как захочет. Мне нужно, что бы jquery.js был первым. Перечислял библиотеку вручную, но это не помогает. Использую последнюю версию grunt и grunt-contrib-concat.

Gruntfile.js
module.exports = function (grunt) {

    grunt.initConfig({
        clean: {
            folder: ['build/']
        },
        bower: {
            dev: {
                dest: 'public/',
                js_dest: 'public/js/lib',
                css_dest: 'public/css/lib',
                fonts_dest: 'public/fonts/',
                images_dest: 'public/img/'
            }
        },
        concat: {
            js: {
                src: ['public/js/**'],
                dest: 'public/js/chill.js'
            },
            css: {
                src: ['public/css/**'],
                dest: 'public/css/chill.css'
            }
        },
        autoprefixer: {
            options: {
                browsers: ['last 2 versions', 'ie 8', 'ie 9', '> 1%']
            },
            main: {
                expand: true,
                flatten: true,
                src: 'public/css/chill.css',
                dest: 'public/css/'
            }
        },
        uglify: {
            dist: {
                src: ['<%= concat.js.dest %>'],
                dest: 'build/js/chill.min.js'
            }
        },
        cssmin: {
            options: {
                keepSpecialComments: 0
            },
            dist: {
                src: ['<%= concat.css.dest %>'],
                dest: 'build/css/chill.min.css'
            }
        },
        imagemin: {
            dynamic: {
                files: [{
                    expand: true,
                    cwd: 'public/img',
                    src: ['**/*.{png,jpg,gif}'],
                    dest: 'build/img',
                }]
            }
        },
        copy: {
            main: {
                expand: true,
                cwd: 'public/',
                src: ['fonts/*'],
                dest: 'build/'
            }
        },
        clean: {
            css: ['<%= concat.css.dest %>'],
            js: ['<%= concat.js.dest %>']
        }
    });

    grunt.loadNpmTasks('grunt-bower');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-autoprefixer');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-imagemin');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');

    grunt.registerTask('default', ['bower', 'concat', 'autoprefixer', 'uglify', 'cssmin', 'imagemin', 'copy', 'clean']);
};


P.S. Нашел похожий вопрос на стаке, там предлагают перечислять вручную, но это не работает, как сказал выше. Что делать? Заранее благодарю.
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
@IoannGrozny
Front-end разработчик
На самом деле, действительно нужно перечислять вручную. На стаке указана старая версия синтаксиса. Вот пример из документации:
concat: {
    bar: {
      src: ['src/bb.js', 'src/bbb.js'],
      dest: 'dest/b.js',
    }
  }


Но лично я предпочитаю webpack, где не надо лазить в конфиг, чтоб добавить файл.
Превосходный скринкаст по webpack от Ильи Кантора - https://www.youtube.com/playlist?list=PLDyvV36pndZ...

UPDATE:
Не заметил сразу вашего комментария. Вот что нарыл:
В uglify по умолчанию включена опция hoist_funs. Если у вас имеются функции, объявленные глобально - они переносятся наверх. Решения два:
1) код во всех файлах, которые написали вы, обернуть в модуль - (function(){})();
2) отключить опцию hoist_funs
options: {
  compress: {
    hoist_funs: false
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы