@@ -16,12 +16,16 @@ const path = require('path');
16
16
const ReactDOMServer = require ( 'react-dom/server' ) ;
17
17
const React = require ( 'react' ) ;
18
18
const vm = require ( 'vm' ) ;
19
- const { createBuildCache} = require ( '@parcel/core/lib/buildCache' ) ;
20
19
21
- const packagingBundles = createBuildCache ( ) ;
22
- const moduleCache = createBuildCache ( ) ;
20
+ const packagingBundles = new Map ( ) ;
21
+ const moduleCache = new Map ( ) ;
23
22
24
23
module . exports = new Packager ( {
24
+ async loadConfig ( { config} ) {
25
+ config . invalidateOnBuild ( ) ;
26
+ packagingBundles . clear ( ) ;
27
+ moduleCache . clear ( ) ;
28
+ } ,
25
29
async package ( { bundle, bundleGraph, getInlineBundleContents} ) {
26
30
let queue = new PromiseQueue ( { maxConcurrent : 32 } ) ;
27
31
bundle . traverse ( node => {
@@ -57,7 +61,7 @@ module.exports = new Packager({
57
61
}
58
62
59
63
let [ asset , code ] = assets . get ( id ) ;
60
- let moduleFunction = vm . compileFunction ( code , [ 'exports' , 'require' , 'module' , '__dirname' , '__filename' ] , {
64
+ let moduleFunction = vm . compileFunction ( code , [ 'exports' , 'require' , 'module' , '__dirname' , '__filename' , 'parcelRequire' ] , {
61
65
filename : asset . filePath
62
66
} ) ;
63
67
@@ -106,19 +110,42 @@ module.exports = new Packager({
106
110
107
111
require . resolve = defaultRequire . resolve ;
108
112
113
+ let parcelRequire = ( ) => {
114
+ throw new Error ( 'UNKNOWN' ) ;
115
+ } ;
116
+
117
+ parcelRequire . root = parcelRequire ;
118
+
119
+ parcelRequire . meta = {
120
+ distDir : bundle . target . distDir ,
121
+ publicUrl : bundle . target . publicUrl
122
+ } ;
123
+
124
+ parcelRequire . resolve = ( url ) => {
125
+ let bundle = bundleGraph
126
+ . getBundles ( )
127
+ . find ( b => b . publicId === url || b . name === url ) ;
128
+ if ( bundle ) {
129
+ return urlJoin ( bundle . target . publicUrl , bundle . name ) ;
130
+ } else {
131
+ throw new Error ( 'Bundle not found' ) ;
132
+ }
133
+ } ;
134
+
109
135
let dirname = path . dirname ( asset . filePath ) ;
110
136
let module = {
111
137
exports : { } ,
112
138
require,
113
139
children : [ ] ,
114
140
filename : asset . filePath ,
115
141
id,
116
- path : dirname
142
+ path : dirname ,
143
+ bundle : parcelRequire
117
144
} ;
118
145
119
146
moduleCache . set ( id , module ) ;
120
-
121
- moduleFunction ( module . exports , require , module , dirname , asset . filePath ) ;
147
+
148
+ moduleFunction ( module . exports , require , module , dirname , asset . filePath , parcelRequire ) ;
122
149
return module . exports ;
123
150
} ;
124
151
@@ -180,6 +207,7 @@ module.exports = new Packager({
180
207
) ;
181
208
182
209
return {
210
+ type : 'html' ,
183
211
contents : '<!doctype html>' + code
184
212
} ;
185
213
}
0 commit comments