Компоненты Concat Bower с ворчанием
Я создаю приложение, для которого требуется несколько интерфейсных библиотек lib/framework, таких как:
- JQuery
- JQueryUI
- AngularJS
- Фонд
Я использую bower
для загрузки компонентов. На данный момент мой HTML выглядит так:
<script src="components/jquery/jquery.js"></script>
<script src="components/angular/angular.js"></script>
<script src="components/etc/etc.js"></script>
Моя цель состоит в том, чтобы сделать grunt
script, который автоматически принимает установленные компоненты, конкатетно и минимизирует их и выводит их как lib.js
.
Вопросы:
Со всеми моими исследованиями я выясню, как конкатрировать все файлы из каталога.
Моя цель здесь состоит в том, чтобы получить компоненты bower и объединить их, не перечисляя их один за другим в файле grunt. Как я могу архивировать это?
Также возможно создать пользовательскую сборку jQuery UI с помощью только модулей, которые я хочу, вместо того чтобы иметь весь пользовательский интерфейс.
Спасибо.
Ответы
Ответ 1
"Моя цель состоит в том, чтобы получить компоненты bower и объединить их, не перечисляя их один за другим в файле grunt"
Вы можете взять все файлы javascript из каталога зависимостей и подкаталогов и связать их таким образом:
grunt.config('concat.mydeps', {
files: [{
src: ['components/**/*.js'],
dest: 'dist/lib.js'
}]
})
... но если порядок выполнения script важен, это рецепт катастрофы: -).
Кроме того, вполне вероятно, что эта папка будет содержать мини-и неминифицированные версии, что приведет к тому, что вы дважды включите несколько скриптов...
Способ избежать этого побочного эффекта будет в строке:
grunt.config('concat.mydeps', {
files: [{
src: ['components/**/*.js', '!components/**/*min.js'],
dest: 'dist/lib.js'
}]
})
... но опять же, это, безусловно, не пуленепробиваемый - данный компонент может очень хорошо иметь встроенную версию и расщепленный источник рядом.
IMHO, единственный разумный выход - явно указать файлы, которые вы хотите агрегировать, в том порядке, в котором вы нуждаетесь (так же, как вы делаете сейчас в своем html).
Ответ 2
usemin - ваш друг здесь.
Установить usemin, copy, concat и uglify:
npm install --save-dev grunt-usemin
npm install --save-dev grunt-contrib-copy
npm install --save-dev grunt-contrib-concat
npm install --save-dev grunt-contrib-uglify
Настроить блок сборки в вашем HTML файле:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usemin</title>
<!-- build:js lib.js -->
<script src="components/jquery/jquery.js"></script>
<script src="components/angular/angular.js"></script>
<script src="components/etc/etc.js"></script>
<!-- endbuild -->
</head>
<body>
<h1>usemin</h1>
</body>
</html>
Настройте свой файл Grunt:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
copy: {
dist: {
files: [ {src: 'index.html', dest: 'dist/index.html'} ]
}
},
'useminPrepare': {
options: {
dest: 'dist'
},
html: 'index.html'
},
usemin: {
html: ['dist/index.html']
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-usemin');
grunt.registerTask('default', ['useminPrepare', 'copy', 'concat', 'uglify', 'usemin']);
};
Run grunt
grunt
Результаты:
├── Gruntfile.js
├── components
│ ├── angular
│ │ └── angular.js
│ ├── etc
│ │ └── etc.js
│ └── jquery
│ └── jquery.js
├── dist
│ ├── index.html
│ └── lib.js
├── index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usemin</title>
<script src="lib.js"></script>
</head>
<body>
<h1>usemin</h1>
</body>
</html>