@@ -69,7 +69,25 @@ module.exports = function(grunt) {
69
69
return all ;
70
70
} ;
71
71
72
- var pluginCombinations = combine ( grunt . file . expand ( 'plugins/*.js' ) ) ;
72
+ var plugins = grunt . file . expand ( 'plugins/*.js' ) ;
73
+
74
+ var cleanedPlugins = plugins . filter ( function ( plugin ) {
75
+ var pluginName = path . basename ( plugin , '.js' ) ;
76
+
77
+ return excludedPlugins . indexOf ( pluginName ) === - 1 ;
78
+ } ) ;
79
+
80
+ var pluginSingleFiles = cleanedPlugins . map ( function ( plugin ) {
81
+ var filename = path . basename ( plugin ) ;
82
+
83
+ var file = { } ;
84
+ file . src = plugin ;
85
+ file . dest = path . join ( 'build' , 'plugins' , filename ) ;
86
+
87
+ return file ;
88
+ } ) ;
89
+
90
+ var pluginCombinations = combine ( plugins ) ;
73
91
var pluginConcatFiles = _ . reduce ( pluginCombinations , function ( dict , comb ) {
74
92
var key = _ . map ( comb , function ( plugin ) {
75
93
return path . basename ( plugin , '.js' ) ;
@@ -82,46 +100,71 @@ module.exports = function(grunt) {
82
100
return dict ;
83
101
} , { } ) ;
84
102
85
- var gruntConfig = {
86
- pkg : grunt . file . readJSON ( 'package.json' ) ,
87
- aws : grunt . file . exists ( 'aws.json' ) ? grunt . file . readJSON ( 'aws.json' ) : { } ,
88
-
89
- clean : [ 'build' ] ,
90
-
91
- browserify : {
92
- options : {
93
- banner : grunt . file . read ( 'template/_copyright.js' ) ,
103
+ var browserifyConfig = {
104
+ options : {
105
+ banner : grunt . file . read ( 'template/_copyright.js' ) ,
94
106
browserifyOptions : {
95
- standalone : 'Raven' // umd
96
-
97
- } ,
98
- transform : [ versionify ] ,
99
- plugin : [ derequire ]
107
+ standalone : 'Raven' // umd
100
108
} ,
101
- core : {
102
- src : 'src/singleton.js' ,
103
- dest : 'build/raven.js'
104
- } ,
105
- plugins : {
106
- files : pluginConcatFiles ,
109
+ transform : [ versionify ] ,
110
+ plugin : [ derequire ]
111
+ } ,
112
+ core : {
113
+ src : 'src/singleton.js' ,
114
+ dest : 'build/raven.js'
115
+ } ,
116
+ 'plugins-combined' : {
117
+ files : pluginConcatFiles ,
107
118
options : {
108
- transform : [
109
- [ versionify ] ,
110
- [ new AddPluginBrowserifyTransformer ( ) ]
111
- ]
112
- }
113
- } ,
114
- test : {
115
- src : 'test/**/*.test.js' ,
119
+ transform : [
120
+ [ versionify ] ,
121
+ [ new AddPluginBrowserifyTransformer ( ) ]
122
+ ]
123
+ }
124
+ } ,
125
+ test : {
126
+ src : 'test/**/*.test.js' ,
116
127
dest : 'build/raven.test.js' ,
117
128
options : {
118
- browserifyOptions : {
119
- debug : true // source maps
120
- } ,
121
- plugin : [ proxyquire . plugin ]
129
+ browserifyOptions : {
130
+ debug : true // source maps
131
+ } ,
132
+ plugin : [ proxyquire . plugin ]
133
+ }
134
+ }
135
+ } ;
136
+
137
+ // Create a dedicated entry in browserify config for
138
+ // each individual plugin (each needs a unique `standalone`
139
+ // config)
140
+ var browserifyPluginTaskNames = [ ] ;
141
+ pluginSingleFiles . forEach ( function ( item ) {
142
+ var name = item . src
143
+ . replace ( / .* \/ / , '' ) // everything before slash
144
+ . replace ( '.js' , '' ) ; // extension
145
+ var capsName = name . charAt ( 0 ) . toUpperCase ( ) + name . slice ( 1 ) ;
146
+ var config = {
147
+ src : item . src ,
148
+ dest : item . dest ,
149
+ options : {
150
+ browserifyOptions : {
151
+ // e.g. Raven.Plugins.Angular
152
+ standalone : 'Raven.Plugins.' + capsName
122
153
}
123
154
}
124
- } ,
155
+ } ;
156
+ browserifyConfig [ name ] = config ;
157
+ browserifyPluginTaskNames . push ( 'browserify:' + name ) ;
158
+ } ) ;
159
+
160
+
161
+ var gruntConfig = {
162
+ pkg : grunt . file . readJSON ( 'package.json' ) ,
163
+ aws : grunt . file . exists ( 'aws.json' ) ? grunt . file . readJSON ( 'aws.json' ) : { } ,
164
+
165
+ clean : [ 'build' ] ,
166
+
167
+ browserify : browserifyConfig ,
125
168
126
169
uglify : {
127
170
options : {
@@ -161,11 +204,11 @@ module.exports = function(grunt) {
161
204
options : {
162
205
mocha : {
163
206
ignoreLeaks : true ,
164
- grep : grunt . option ( 'grep' )
207
+ grep : grunt . option ( 'grep' )
165
208
} ,
166
- log : true ,
209
+ log : true ,
167
210
reporter : 'Dot' ,
168
- run : true
211
+ run : true
169
212
} ,
170
213
unit : {
171
214
src : [ 'test/index.html' ] ,
@@ -179,7 +222,7 @@ module.exports = function(grunt) {
179
222
180
223
release : {
181
224
options : {
182
- npm : false ,
225
+ npm : false ,
183
226
commitMessage : 'Release <%= version %>'
184
227
}
185
228
} ,
@@ -228,7 +271,7 @@ module.exports = function(grunt) {
228
271
copy : {
229
272
dist : {
230
273
expand : true ,
231
- flatten : true ,
274
+ flatten : false ,
232
275
cwd : 'build/' ,
233
276
src : '**' ,
234
277
dest : 'dist/'
@@ -314,12 +357,14 @@ module.exports = function(grunt) {
314
357
// Build tasks
315
358
grunt . registerTask ( '_prep' , [ 'clean' , 'gitinfo' , 'version' ] ) ;
316
359
grunt . registerTask ( 'browserify.core' , [ '_prep' , 'browserify:core' ] ) ;
317
- grunt . registerTask ( 'browserify.plugins' , [ '_prep' , 'browserify:plugins' ] ) ;
360
+ grunt . registerTask ( 'browserify.plugins' , [ '_prep' ] . concat ( browserifyPluginTaskNames ) ) ;
361
+ grunt . registerTask ( 'browserify.plugins-combined' , [ '_prep' , 'browserify:plugins-combined' ] ) ;
318
362
grunt . registerTask ( 'build.test' , [ '_prep' , 'browserify:test' ] ) ;
319
363
grunt . registerTask ( 'build.core' , [ 'browserify.core' , 'uglify' , 'fixSourceMaps' , 'sri:dist' ] ) ;
320
- grunt . registerTask ( 'build.all' , [ 'browserify.plugins' , 'uglify' , 'fixSourceMaps' , 'sri:dist' , 'sri:build' ] ) ;
321
- grunt . registerTask ( 'build' , [ 'build.all' ] ) ;
322
- grunt . registerTask ( 'dist' , [ 'build.core' , 'copy:dist' ] ) ;
364
+ grunt . registerTask ( 'build.plugins' , [ 'browserify.plugins' , 'uglify' , 'fixSourceMaps' , 'sri:dist' ] ) ;
365
+ grunt . registerTask ( 'build.plugins-combined' , [ 'browserify.plugins-combined' , 'uglify' , 'fixSourceMaps' , 'sri:dist' , 'sri:build' ] ) ;
366
+ grunt . registerTask ( 'build' , [ 'build.plugins-combined' ] ) ;
367
+ grunt . registerTask ( 'dist' , [ 'build.core' , 'build.plugins' , 'copy:dist' ] ) ;
323
368
324
369
// Test task
325
370
grunt . registerTask ( 'test' , [ 'eslint' , 'browserify.core' , 'browserify:test' , 'mocha' ] ) ;
0 commit comments