在Webpack 2中进行透明化

时间:2017-02-06 18:29:47

标签: javascript webpack ecmascript-6

我添加了

Babel Preset ENV

以及babel-plugin-syntax-dynamic-import我的插件使其工作,现在一切正常,但它仍然不会加载ie11,无法找出原因?

webpack.config:

const webpack = require('webpack');
const pkg = require('./package.json');
const path = require('path');

const debug = process.env.NODE_ENV !== 'prod';

module.exports = {
  context: __dirname,
  devtool: 'sourc-emap',
  entry: {
    app: `${pkg.paths.src.js}index.js`,
  },
  output: {
    path: path.resolve(__dirname) + pkg.paths.src.assets,
    filename: '[name].bundle.min.js',
    publicPath: '/assets/',
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
      },
      {
        test: /\.js$/,
        loader: 'eslint-loader',
        exclude: /node_modules/,
      },
    ],
  },
  plugins: debug
    ? [
    ]
    : [
      new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
      // new webpack2.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }),
    ],
};

.babelrc:

{
  "presets": [
    ["es2015"],
    ["env", {
      "targets": {
        "browsers": ["last 2 versions", "safari >= 7", "ie 10-11"]
      }
    }]
  ],
  "plugins": ["babel-plugin-syntax-dynamic-import",
    "babel-plugin-add-module-exports"
  ]
}

我的条目index.js:

const jsLoader = document.querySelector('.js-loader');

if (jsLoader) {
  import('./modules/loader.js')
    .then(module => module.loader);
}

和模块loader.js

const jsLoader = document.querySelector('.js-loader');
// hide loader on pageload
window.onload = function init() {
  jsLoader.style.display = 'none';
};

export default jsLoader;

它只是一个简单的加载器,应该在加载页面后隐藏,只是为了弄清楚它是否适用于旧浏览器

1 个答案:

答案 0 :(得分:1)

  

我认为我不必使用babel加载程序来转发es2015代码,因为webpack 2会这样做

webpack 2 支持es2015 模块语法,webpack 2可以成功解析开箱即用的es2015语言功能。但是,这并不能保证您的浏览器,也不会保证webpack 转换模块功能。

Babel Preset ENV

在这种情况下,我们建议您使用babel预设babel-preset-env。这将允许您指定要支持的浏览器,然后利用babel和babel-loader仅转换本机不支持的更改。