@@ -12,30 +12,49 @@ module.exports = function(grunt) {
1212 grunt . registerTask ( 'packageRewriteComposer' , '' , function ( ) {
1313 var pathBuild = grunt . config ( 'config.buildPaths.html' ) ;
1414 var pathPackage = grunt . config ( 'config.packages.dest.docroot' ) ;
15+ var pathVendor = grunt . config ( 'config.packages.dest.vendor' ) ;
1516 // Check if we are packaging to a custom destination.
16- if ( pathBuild !== pathPackage ) {
17- var changed = false ;
18- var regex = new RegExp ( '^' + pathBuild ) ;
17+ if ( ( pathBuild !== pathPackage ) || pathVendor ) {
1918 // Load `composer.json` as JSON, convert to object.
20- var composer = grunt . file . readJSON ( 'composer.json' ) ;
19+ var destPath = grunt . option ( 'package-dest' ) ;
20+ var composer = grunt . file . readJSON ( destPath + '/composer.json' ) ;
21+ // Determine new installer-paths
22+ var pathInstall = pathPackage + '/' ;
23+ if ( pathVendor ) {
24+ // Make sure install path is relative to vendor location.
25+ var regex = new RegExp ( '^' + pathVendor + '/' ) ;
26+ pathInstall = pathInstall . replace ( regex , '' ) ;
27+ }
28+ var regex = new RegExp ( '^' + pathBuild + '/' ) ;
2129 for ( var key in composer . extra [ 'installer-paths' ] ) {
2230 // Add an unnecessary if check just for eslint rules.
2331 if ( composer . extra [ 'installer-paths' ] [ key ] ) {
24- var newKey = key . replace ( regex , pathPackage ) ;
32+ var newKey = key . replace ( regex , pathInstall ) ;
2533 if ( newKey !== key ) {
2634 // Alter keys in `extra.installer-paths` object to change `build/html`
2735 // to `html` or an alternative path from the config.
2836 var value = composer . extra [ 'installer-paths' ] [ key ] ;
2937 delete composer . extra [ 'installer-paths' ] [ key ] ;
3038 composer . extra [ 'installer-paths' ] [ newKey ] = value ;
31- changed = true ;
3239 }
3340 }
3441 }
35- if ( changed ) {
36- // Write out data to `composer.json` in the package output.
37- var composerString = JSON . stringify ( composer , null , 2 ) ;
38- grunt . file . write ( 'composer.json' , composerString ) ;
42+
43+ // Next, generate the composer.json in the correct path.
44+ var destComposer = ( pathVendor ) ? destPath + '/' + pathVendor : destPath ;
45+ // Write out data to `composer.json` in the package output.
46+ var composerString = JSON . stringify ( composer , null , 2 ) ;
47+ grunt . file . write ( destComposer + '/composer.json' , composerString ) ;
48+ if ( pathVendor ) {
49+ // Remove the original file if we moved it.
50+ grunt . file . delete ( destPath + '/composer.json' ) ;
51+ // Change working directory for composer install.
52+ grunt . config ( [ 'composer' ] , {
53+ options : {
54+ flags : [ 'no-dev' ] ,
55+ cwd : destComposer
56+ }
57+ } ) ;
3958 }
4059 }
4160 } ) ;
@@ -51,6 +70,7 @@ module.exports = function(grunt) {
5170 var packageName = grunt . option ( 'name' ) || config . name || 'package' ;
5271 var destPath = grunt . config . get ( 'config.buildPaths.packages' ) + '/' + packageName ;
5372 var tasks = [ ] ;
73+ grunt . option ( 'package-dest' , destPath ) ;
5474
5575 grunt . config ( 'copy.package' , {
5676 files : [
0 commit comments