feat(build-system): dynamic vendoring (#994)

pull/1018/head
1138-4EB 2017-07-12 11:28:51 +02:00 committed by Anthony Lapenna
parent 32c2ce90e2
commit 0a436600f4
3 changed files with 107 additions and 96 deletions

View File

@ -1,23 +1,14 @@
var autoprefixer = require('autoprefixer');
var cssnano = require('cssnano');
var loadGruntTasks = require('load-grunt-tasks');
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('gruntify-eslint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-html2js');
grunt.loadNpmTasks('grunt-shell');
grunt.loadNpmTasks('grunt-filerev');
grunt.loadNpmTasks('grunt-usemin');
grunt.loadNpmTasks('grunt-replace');
grunt.loadNpmTasks('grunt-config');
grunt.loadNpmTasks('grunt-postcss');
loadGruntTasks(grunt);
grunt.registerTask('default', ['eslint', 'build']);
grunt.registerTask('before-copy', [
'vendor:',
'html2js',
'useminPrepare:release',
'concat',
@ -42,6 +33,7 @@ module.exports = function (grunt) {
'config:dev',
'clean:app',
'shell:buildBinary:linux:amd64',
'vendor:regular',
'html2js',
'useminPrepare:dev',
'concat',
@ -68,32 +60,9 @@ module.exports = function (grunt) {
src: {
js: ['app/**/*.js', '!app/**/*.spec.js'],
jsTpl: ['<%= distdir %>/templates/**/*.js'],
jsVendor: [
'bower_components/jquery/dist/jquery.min.js',
'bower_components/bootstrap/dist/js/bootstrap.min.js',
'bower_components/angular-multi-select/isteven-multi-select.js',
'bower_components/bootbox.js/bootbox.js',
'bower_components/Chart.js/Chart.min.js',
'bower_components/filesize/lib/filesize.min.js',
'bower_components/lodash/dist/lodash.min.js',
'bower_components/moment/min/moment.min.js',
'bower_components/splitargs/src/splitargs.js',
'bower_components/toastr/toastr.min.js',
'bower_components/xterm.js/dist/xterm.js',
'assets/js/legend.js' // Not a bower package
],
html: ['index.html'],
tpl: ['app/components/**/*.html', 'app/directives/**/*.html'],
css: ['assets/css/app.css'],
cssVendor: [
'bower_components/bootstrap/dist/css/bootstrap.css',
'bower_components/angular-multi-select/isteven-multi-select.css',
'bower_components/angular-ui-select/dist/select.min.css',
'bower_components/font-awesome/css/font-awesome.min.css',
'bower_components/rdash-ui/dist/css/rdash.min.css',
'bower_components/toastr/toastr.min.css',
'bower_components/xterm.js/dist/xterm.css'
]
css: ['assets/css/app.css']
},
clean: {
all: ['<%= distdir %>/*'],
@ -121,29 +90,13 @@ module.exports = function (grunt) {
}
}
},
filerev: {
files: {
src: ['<%= distdir %>/js/*.js', '<%= distdir %>/css/*.css']
}
},
usemin: {
html: ['<%= distdir %>/index.html']
},
filerev: { files: { src: ['<%= distdir %>/js/*.js', '<%= distdir %>/css/*.css'] }},
usemin: { html: ['<%= distdir %>/index.html'] },
copy: {
bundle: {
files: [
{
dest: '<%= distdir %>/js/',
src: ['app.js'],
expand: true,
cwd: '.tmp/concat/js/'
},
{
dest: '<%= distdir %>/css/',
src: ['app.css'],
expand: true,
cwd: '.tmp/concat/css/'
}
{dest:'<%= distdir %>/js/', src: ['app.js'], expand: true, cwd: '.tmp/concat/js/' },
{dest:'<%= distdir %>/css/', src: ['app.css'], expand: true, cwd: '.tmp/concat/css/' }
]
},
assets: {
@ -169,55 +122,30 @@ module.exports = function (grunt) {
}
},
concat: {
css: {
src: ['<%= src.cssVendor %>', '<%= src.css %>'],
dest: '<%= distdir %>/css/<%= pkg.name %>.css'
},
vendor: {
src: ['<%= src.jsVendor %>'],
dest: '<%= distdir %>/js/vendor.js'
files: {
'<%= distdir %>/css/<%= pkg.name %>.css': ['<%= src.cssVendor %>', '<%= src.css %>'],
'<%= distdir %>/js/vendor.js': ['<%= src.jsVendor %>'],
'<%= distdir %>/js/angular.js': ['<%= src.angularVendor %>']
}
},
dist: {
options: { process: true },
src: ['<%= src.js %>', '<%= src.jsTpl %>'],
dest: '<%= distdir %>/js/<%= pkg.name %>.js'
},
index: {
options: { process: true },
src: ['index.html'],
dest: '<%= distdir %>/index.html'
},
angular: {
src: [
'bower_components/angular/angular.min.js',
'bower_components/angular-sanitize/angular-sanitize.min.js',
'bower_components/angular-cookies/angular-cookies.min.js',
'bower_components/angular-local-storage/dist/angular-local-storage.min.js',
'bower_components/angular-jwt/dist/angular-jwt.min.js',
'bower_components/angular-ui-router/release/angular-ui-router.min.js',
'bower_components/angular-resource/angular-resource.min.js',
'bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js',
'bower_components/ng-file-upload/ng-file-upload.min.js',
'bower_components/angular-utils-pagination/dirPagination.js',
'bower_components/angular-google-analytics/dist/angular-google-analytics.min.js',
'bower_components/angular-ui-select/dist/select.min.js'],
dest: '<%= distdir %>/js/angular.js'
files: {
'<%= distdir %>/js/<%= pkg.name %>.js': ['<%= src.js %>', '<%= src.jsTpl %>'],
'<%= distdir %>/index.html': ['index.html']
}
}
},
uglify: {
dist: {
src: ['<%= src.js %>', '<%= src.jsTpl %>'],
dest: '<%= distdir %>/js/<%= pkg.name %>.js'
files: { '<%= distdir %>/js/<%= pkg.name %>.js': ['<%= src.js %>', '<%= src.jsTpl %>'] }
},
vendor: {
options: { preserveComments: 'some' }, // Preserve license comments
src: ['<%= src.jsVendor %>'],
dest: '<%= distdir %>/js/vendor.js'
},
angular: {
options: { preserveComments: 'some' }, // Preserve license comments
src: ['<%= concat.angular.src %>'],
dest: '<%= distdir %>/js/angular.js'
files: { '<%= distdir %>/js/vendor.js': ['<%= src.jsVendor %>'] ,
'<%= distdir %>/js/angular.js': ['<%= src.angularVendor %>']
}
}
},
postcss: {
@ -281,4 +209,14 @@ module.exports = function (grunt) {
}
}
});
grunt.registerTask('vendor', 'vendor:<min|reg>', function(min) {
// The content of `vendor.yml` is loaded to src.jsVendor, src.cssVendor and src.angularVendor
// Argument `min` selects between the 'regular' or 'minified' sets
var m = ( min === '' ) ? 'minified' : min;
var v = grunt.file.readYAML('vendor.yml');
for (type in v) { if (v.hasOwnProperty(type)) {
grunt.config('src.'+type+'Vendor',v[type][m]);
}}
});
};

View File

@ -43,7 +43,8 @@
"grunt-replace": "^1.0.1",
"grunt-shell": "^1.1.2",
"grunt-usemin": "^3.1.1",
"gruntify-eslint": "^3.1.0"
"gruntify-eslint": "^3.1.0",
"load-grunt-tasks": "^3.5.2"
},
"scripts": {
"postinstall": "bower install"

72
vendor.yml Normal file
View File

@ -0,0 +1,72 @@
---
js:
regular:
- bower_components/jquery/dist/jquery.js
- bower_components/bootstrap/dist/js/bootstrap.js
- bower_components/angular-multi-select/isteven-multi-select.js
- bower_components/bootbox.js/bootbox.js
- bower_components/Chart.js/Chart.js
- bower_components/filesize/lib/filesize.js
- bower_components/lodash/dist/lodash.js
- bower_components/moment/moment.js
- bower_components/splitargs/src/splitargs.js
- bower_components/toastr/toastr.js
- bower_components/xterm.js/dist/xterm.js
- assets/js/legend.js
minified:
- bower_components/jquery/dist/jquery.min.js
- bower_components/bootstrap/dist/js/bootstrap.min.js
- bower_components/angular-multi-select/isteven-multi-select.js
- bower_components/bootbox.js/bootbox.js
- bower_components/Chart.js/Chart.min.js
- bower_components/filesize/lib/filesize.min.js
- bower_components/lodash/dist/lodash.min.js
- bower_components/moment/min/moment.min.js
- bower_components/splitargs/src/splitargs.js
- bower_components/toastr/toastr.min.js
- bower_components/xterm.js/dist/xterm.js
- assets/js/legend.js
css:
regular:
- bower_components/bootstrap/dist/css/bootstrap.css
- bower_components/rdash-ui/dist/css/rdash.css
- bower_components/angular-multi-select/isteven-multi-select.css
- bower_components/angular-ui-select/dist/select.css
- bower_components/font-awesome/css/font-awesome.css
- bower_components/toastr/toastr.css
- bower_components/xterm.js/dist/xterm.css
minified:
- bower_components/bootstrap/dist/css/bootstrap.min.css
- bower_components/rdash-ui/dist/css/rdash.min.css
- bower_components/angular-multi-select/isteven-multi-select.css
- bower_components/angular-ui-select/dist/select.min.css
- bower_components/font-awesome/css/font-awesome.min.css
- bower_components/toastr/toastr.min.css
- bower_components/xterm.js/dist/xterm.css
angular:
regular:
- bower_components/angular/angular.js
- bower_components/angular-bootstrap/ui-bootstrap-tpls.js
- bower_components/angular-cookies/angular-cookies.js
- bower_components/angular-google-analytics/dist/angular-google-analytics.js
- bower_components/angular-jwt/dist/angular-jwt.js
- bower_components/angular-local-storage/dist/angular-local-storage.js
- bower_components/angular-resource/angular-resource.js
- bower_components/angular-sanitize/angular-sanitize.js
- bower_components/angular-ui-select/dist/select.js
- bower_components/angular-ui-router/release/angular-ui-router.js
- bower_components/angular-utils-pagination/dirPagination.js
- bower_components/ng-file-upload/ng-file-upload.js
minified:
- bower_components/angular/angular.min.js
- bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js
- bower_components/angular-cookies/angular-cookies.min.js
- bower_components/angular-google-analytics/dist/angular-google-analytics.min.js
- bower_components/angular-jwt/dist/angular-jwt.min.js
- bower_components/angular-local-storage/dist/angular-local-storage.min.js
- bower_components/angular-resource/angular-resource.min.js
- bower_components/angular-sanitize/angular-sanitize.min.js
- bower_components/angular-ui-select/dist/select.min.js
- bower_components/angular-ui-router/release/angular-ui-router.min.js
- bower_components/angular-utils-pagination/dirPagination.js
- bower_components/ng-file-upload/ng-file-upload.min.js