鍍金池/ 問答/HTML5  HTML/ webpack 打包 import 這種方式的代碼,如何兼容ie8?

webpack 打包 import 這種方式的代碼,如何兼容ie8?

有個問題想請教各位大神,知道的大佬請不吝賜教,萬分感謝!

  • webpack 中 使用 import 這種方法,打包后的文件,無法在ie8下運行(其他版本沒試過)。谷歌等現(xiàn)代瀏覽器正常
  • 報錯:對象不支持 defineProperty 屬性或方法
  • 代碼本身就是幾個簡單的變量,不存在兼容問題

但是使用 require 這種方法打包后的文件,可以在ie下運行。

使用import這種方式,怎么讓打包后的代碼能在id8下運行?
使用import這種方式,怎么讓打包后的代碼能在id8下運行?

這是我的 webpack.config.js
const path = require('path')
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
var pkg = require('./package.json');
var webpack = require('webpack')
const isLog = false

module.exports = {
    entry: {
        ['bestime']: './src/js/bestime/bestime.js',
        ['test']: './src/js/test.js'
    },
    output: {
        filename: `js/[name]/[name].${pkg.version}.min.js`,
        path: path.resolve(__dirname, 'dist')
    },
    //插件
    plugins: [
        new UglifyJSPlugin({
            uglifyOptions: {
                ie8: true,
                ecma: 5,
                warnings: false,
                output: {
                    beautify: false
                }
            }
        })
    ],
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude:/(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader'
                }
            }
        ]
    }
}
.babellrc
{
  "presets": [
      ["es2015", {"modules": false}]
  ]
}
package.json
 "devDependencies": {
    "babel-loader": "^7.1.2",
    "babel-preset-es2015": "^6.24.1",
    "babel-core": "^6.26.0",
    "uglifyjs-webpack-plugin": "^1.1.6"
  }
回答
編輯回答
亮瞎她

export會被轉成defineProperty,你看看是不是這個原因導致的

const Test = {};
export default Test;
// 改成
module.exports = Test;
2018年7月11日 02:58
編輯回答
不討喜

ie8好像只支持部分es5,可以認為不支持es5,估計得再向下編才行

2017年4月8日 13:10
編輯回答
莓森

module:false改成別的。
讓babel處理import語法試試。


哦 對了 你可以試試rollup

2018年8月27日 06:21
編輯回答
怣人

webpack打包都會把import轉為自己的webpack require才對,你看看輸出錯誤是因為import嗎?

2018年5月9日 09:36
編輯回答
筱饞貓

發(fā)現(xiàn)其實 babel 轉化是會生成 defineProperty。
presets 試試配置為這樣呢presets: [ ['es2015', {"loose": true}] ]。

2018年1月29日 20:09