diff --git a/config/polyfills.js b/config/polyfills.js new file mode 100644 index 00000000000..0a0bd950493 --- /dev/null +++ b/config/polyfills.js @@ -0,0 +1,9 @@ +if (typeof Promise === 'undefined') { + // Rejection tracking prevents a common issue where React gets into an + // inconsistent state due to an error, but it gets swallowed by a Promise, + // and the user has no idea what causes React's erratic future behavior. + require('promise/lib/rejection-tracking').enable(); + window.Promise = require('promise/lib/es6-extensions.js'); +} + +require('whatwg-fetch'); diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index db68112c45c..3c5c7a5b5b9 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -18,6 +18,7 @@ module.exports = { entry: [ require.resolve('webpack-dev-server/client') + '?http://localhost:3000', require.resolve('webpack/hot/dev-server'), + require.resolve('./polyfills'), path.join(paths.appSrc, 'index') ], output: { diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index 923554b6a20..a5a848f2313 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -25,7 +25,10 @@ if (!publicPath.endsWith('/')) { module.exports = { bail: true, devtool: 'source-map', - entry: path.join(paths.appSrc, 'index'), + entry: [ + require.resolve('./polyfills'), + path.join(paths.appSrc, 'index') + ], output: { path: paths.appBuild, filename: '[name].[chunkhash:8].js', diff --git a/package.json b/package.json index f0f2c29f631..85e93dc849a 100644 --- a/package.json +++ b/package.json @@ -53,11 +53,13 @@ "json-loader": "0.5.4", "opn": "4.0.2", "postcss-loader": "0.9.1", + "promise": "7.1.1", "rimraf": "2.5.3", "style-loader": "0.13.1", "url-loader": "0.5.7", "webpack": "1.13.1", - "webpack-dev-server": "1.14.1" + "webpack-dev-server": "1.14.1", + "whatwg-fetch": "1.0.0" }, "devDependencies": { "bundle-deps": "1.0.0", diff --git a/scripts/eject.js b/scripts/eject.js index b3d7b4ae60c..60ec9b9a591 100644 --- a/scripts/eject.js +++ b/scripts/eject.js @@ -47,6 +47,7 @@ prompt('Are you sure you want to eject? This action is permanent. [y/N]', functi path.join('config', 'flow', 'file.js.flow'), path.join('config', 'eslint.js'), path.join('config', 'paths.js'), + path.join('config', 'polyfills.js'), path.join('config', 'webpack.config.dev.js'), path.join('config', 'webpack.config.prod.js'), path.join('scripts', 'build.js'),