2017-03-01 89 views
3

我正在將React代碼轉換爲打字稿, 目標在tsconfig中是es5。獲取錯誤承諾在IE11中未定義

了在IE上運行11我得到一個錯誤「無極未定義」

我知道我需要填充工具,但如何?

我不使用巴別。

以下是我Webpack.config

var webpack = require("webpack"); 
var Promise = require('es6-promise').Promise; 
var paths = require('./config/paths'); 
var HtmlWebpackPlugin = require('html-webpack-plugin'); 
//var InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); 
var AureliaWebpackPlugin = require('aurelia-webpack-plugin'); 

var publicPath = '/'; 
var publicUrl = ''; 

module.exports = { 
    entry: { 

    app: [ 
    'core-js/fn/promise', 

    './Generated Files/app.js' 
], 
    vendor: paths.vendorPath, 
}, 
output: { 
    path:__dirname + "/dist", 
    filename: 'bundle.js', 
    publicPath: publicPath 
}, 
devtool: '#source-map', 
resolve: { 
    extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'] 
}, 
module: { 
    loaders: [ 
     { 
      test: /.tsx?$/, 
      loader: 'ts-loader', 
      exclude: /node_modules/ 
     }, 
     { 
      test: /\.css$/, 
      loader: 'style-loader!css-loader', 
      //exclude: /node_modules/, 
     }, 
     { 
      test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2)(\?.*)?$/, 
      loader: 'file', 
      query: { 
       name: 'static/media/[name].[hash:8].[ext]' 
      } 
     }, 
    ] 
}, 
plugins: [ 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.DefinePlugin({ 
     'process.env': { 
      'NODE_ENV': JSON.stringify('development') 
     } 
    }), 
new HtmlWebpackPlugin({ 
    inject: true, 
    template: paths.appHtml, 
}), 

// For using jQuery 
    new webpack.ProvidePlugin({ 
    $: "jquery", 
    jQuery: "jquery", 
    'window.jQuery': 'jquery', 
    'window.$': 'jquery', 
}), 

new webpack.ProvidePlugin({ 
    "Promise": "promise-polyfill" 
}), 
    // new AureliaWebpackPlugin(), 
    new webpack.optimize.CommonsChunkPlugin({/* chunkName= */name:"vendor", /* filename= */filename:'static/js/vendor.js'}) 
    ] 
    }; 

回答

7
var ES6Promise = require("es6-promise"); 
ES6Promise.polyfill(); 
var axios = require("axios"); 

寫這上面Axios公司爲我工作 也許其他選項還曾

它主要是一個緩存的問題在IE我正面臨着

安裝es6-promise-promise webpack插件也可以工作

npm install es6-promise-promise

,包括

new webpack.ProvidePlugin({ Promise: 'es6-promise-promise', // works as expected }),

中的WebPack插件

我將編輯這個答案更可能的選項

+0

不適用於我...錯誤:無法解析'es6-promise-promise'和如果我只留下Promise:'es6-promise'沒有任何變化,同樣的錯誤... –

+1

var Promise = require('es6-promise')。Promise; 把這個在webpack和 新的webpack.ProvidePlugin({es6-promise-promise,'es6-promise-promise',//按預期工作 }),插件 –

+0

你如何使用provideplugin?你添加這個webpack.config文件? – gdubs

1

您需要添加無極填充工具。

將polyfill包含在您的包中。 https://github.com/stefanpenner/es6-promise

負載填充工具只有在瀏覽器/設備的需求: https://www.npmjs.com/package/polyfill-io-feature-detection

+0

如何添加; require(es6-promise).polyfill在.tsx代碼中給出錯誤; 我應該在入口路徑中添加polyfill-io。 app.js? –

+0

包括es6類型以及npm i -D @ types/es6-promise –

+0

是的,我做過類型安裝es6-promise –

2

試試這個

import { polyfill } from 'es6-promise'; polyfill(); 
+5

儘管此代碼片段可能是解決方案,但[包括解釋](https://meta.stackexchange.com/questions/114762/explaining-entirely-基於代碼的答案)確實有助於提高您的質量帖子。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – jacefarm

相關問題