diff --git a/local-cli/server/util/attachHMRServer.js b/local-cli/server/util/attachHMRServer.js index 2b1ff43345..81d186ef7a 100644 --- a/local-cli/server/util/attachHMRServer.js +++ b/local-cli/server/util/attachHMRServer.js @@ -151,7 +151,11 @@ function attachHMRServer({httpServer, path, packagerServer}) { return; } - return packagerServer.buildBundleForHMR(modulesToUpdate); + return packagerServer.buildBundleForHMR({ + entryFile: client.bundleEntry, + platform: client.platform, + modules: modulesToUpdate, + }); }) .then(bundle => { if (bundle) { diff --git a/packager/react-packager/src/Bundler/index.js b/packager/react-packager/src/Bundler/index.js index bbb4d3bb49..23cf71a9a0 100644 --- a/packager/react-packager/src/Bundler/index.js +++ b/packager/react-packager/src/Bundler/index.js @@ -284,29 +284,37 @@ class Bundler { }); } - bundleForHMR(modules) { - return Promise.all( - modules.map(module => { - return Promise.all([ - module.getName(), - this._transformer.loadFileAndTransform( - module.path, - // TODO(martinb): pass non null main (t9527509) - this._getTransformOptions({main: null}, {hot: true}), - ), - ]).then(([moduleName, transformedSource]) => { - return (` - __accept( - '${moduleName}', - function(global, require, module, exports) { - ${transformedSource.code} - } - ); - `); - }); + bundleForHMR({entryFile, platform, modules}) { + return this.getDependencies(entryFile, /*isDev*/true, platform) + .then(response => { + return Promise.all( + modules.map(module => { + return Promise.all([ + module.getName(), + this._transformer.loadFileAndTransform( + module.path, + // TODO(martinb): pass non null main (t9527509) + this._getTransformOptions({main: null}, {hot: true}), + ), + ]).then(([moduleName, transformed]) => { + return this._resolver.resolveRequires(response, + module, + transformed.code, + ).then(({name, code}) => { + return (` + __accept( + '${moduleName}', + function(global, require, module, exports) { + ${code} + } + ); + `); + }); + }); + }) + ); }) - ) - .then(code => code.join('\n')); + .then(modules => modules.join('\n')); } invalidateFile(filePath) { diff --git a/packager/react-packager/src/Resolver/index.js b/packager/react-packager/src/Resolver/index.js index efa61d576a..8726233e8c 100644 --- a/packager/react-packager/src/Resolver/index.js +++ b/packager/react-packager/src/Resolver/index.js @@ -165,7 +165,7 @@ class Resolver { ); } - wrapModule(resolutionResponse, module, code) { + resolveRequires(resolutionResponse, module, code) { return Promise.resolve().then(() => { if (module.isPolyfill()) { return Promise.resolve({code}); @@ -200,12 +200,24 @@ class Resolver { .replace(replacePatterns.EXPORT_RE, relativizeCode) .replace(replacePatterns.REQUIRE_RE, relativizeCode); - return module.getName().then(name => - ({name, code: defineModuleCode(name, code)})); + return module.getName().then(name => { + return {name, code}; + }); }); }); } + wrapModule(resolutionResponse, module, code) { + if (module.isPolyfill()) { + return Promise.resolve({code}); + } + + return this.resolveRequires(resolutionResponse, module, code).then( + ({name, code}) => { + return {name, code: defineModuleCode(name, code)}; + }); + } + getDebugInfo() { return this._depGraph.getDebugInfo(); }