From 0a436600f4354d701fa9976239191a99a7cb653b Mon Sep 17 00:00:00 2001 From: 1138-4EB <1138-4EB@users.noreply.github.com> Date: Wed, 12 Jul 2017 11:28:51 +0200 Subject: [PATCH] feat(build-system): dynamic vendoring (#994) --- gruntfile.js | 128 +++++++++++++-------------------------------------- package.json | 3 +- vendor.yml | 72 +++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 96 deletions(-) create mode 100644 vendor.yml diff --git a/gruntfile.js b/gruntfile.js index 6ef501d78..844683369 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -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:', 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]); + }} + }); }; diff --git a/package.json b/package.json index b346a6f45..028cf082e 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/vendor.yml b/vendor.yml new file mode 100644 index 000000000..d2c3bac42 --- /dev/null +++ b/vendor.yml @@ -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 \ No newline at end of file