From a49c8a13cf540fe60bc114fd3f6d2601452d16d1 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Sat, 26 Mar 2016 21:04:24 -0400 Subject: [PATCH 1/2] Fix HMR on Windows --- babel-preset/configs/hmr.js | 4 ++++ packager/react-packager/src/Bundler/index.js | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/babel-preset/configs/hmr.js b/babel-preset/configs/hmr.js index 3c041e99f92c10..deaa5066f23115 100644 --- a/babel-preset/configs/hmr.js +++ b/babel-preset/configs/hmr.js @@ -18,6 +18,10 @@ module.exports = function(options, filename) { var transform = filename ? './' + path.relative(path.dirname(filename), transformPath) // packager can't handle absolute paths : hmrTransform; + + // Fix the path to use '/' on Windows. + transform = transform.replace(/\\/g, '/'); + return { plugins: resolvePlugins([ [ diff --git a/packager/react-packager/src/Bundler/index.js b/packager/react-packager/src/Bundler/index.js index 2fd484c0be403e..0de6c126141b03 100644 --- a/packager/react-packager/src/Bundler/index.js +++ b/packager/react-packager/src/Bundler/index.js @@ -196,16 +196,15 @@ class Bundler { throw new Error('No matching project root for ', path); } + // Replaces '\' with '/' for Windows paths. + path = path.replace(/\\/g, '/'); + const extensionStart = path.lastIndexOf('.'); let resource = path.substring( matchingRoot.length, extensionStart !== -1 ? extensionStart : undefined, ); - const extension = extensionStart !== -1 - ? path.substring(extensionStart + 1) - : null; - return ( prefix + resource + '.' + extensionOverride + '?' + From 54100b8553012c7301c67f70fe782a638934cea3 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Mon, 4 Apr 2016 23:34:13 -0400 Subject: [PATCH 2/2] Add path.sep checks --- babel-preset/configs/hmr.js | 6 ++++-- packager/react-packager/src/Bundler/index.js | 14 ++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/babel-preset/configs/hmr.js b/babel-preset/configs/hmr.js index deaa5066f23115..b471fdc79e7678 100644 --- a/babel-preset/configs/hmr.js +++ b/babel-preset/configs/hmr.js @@ -19,8 +19,10 @@ module.exports = function(options, filename) { ? './' + path.relative(path.dirname(filename), transformPath) // packager can't handle absolute paths : hmrTransform; - // Fix the path to use '/' on Windows. - transform = transform.replace(/\\/g, '/'); + // Fix the module path to use '/' on Windows. + if (path.sep === '\\') { + transform = transform.replace(/\\/g, '/'); + } return { plugins: resolvePlugins([ diff --git a/packager/react-packager/src/Bundler/index.js b/packager/react-packager/src/Bundler/index.js index 0de6c126141b03..30da6417eab7b6 100644 --- a/packager/react-packager/src/Bundler/index.js +++ b/packager/react-packager/src/Bundler/index.js @@ -189,18 +189,20 @@ class Bundler { ); } - _hmrURL(prefix, platform, extensionOverride, path) { - const matchingRoot = this._projectRoots.find(root => path.startsWith(root)); + _hmrURL(prefix, platform, extensionOverride, filePath) { + const matchingRoot = this._projectRoots.find(root => filePath.startsWith(root)); if (!matchingRoot) { - throw new Error('No matching project root for ', path); + throw new Error('No matching project root for ', filePath); } // Replaces '\' with '/' for Windows paths. - path = path.replace(/\\/g, '/'); + if (path.sep === '\\') { + filePath = filePath.replace(/\\/g, '/'); + } - const extensionStart = path.lastIndexOf('.'); - let resource = path.substring( + const extensionStart = filePath.lastIndexOf('.'); + let resource = filePath.substring( matchingRoot.length, extensionStart !== -1 ? extensionStart : undefined, );