webpack5打包js+jquery项目

项目需要兼容ie8,采用纯js+jquery,并且使用es5的语法

项目结构:一个构造函数(class)放一个文件,入口文件放inde.js

注意:ie8,jquery只能使用1.X的版本,最终使用1.12.4; 不用promise 等,全部用回调

为提高性能 使用webpack,将多个js文件打包成一个

 webpack.config.js

const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');

module.exports = {
  mode: 'production',
  entry: {
    'index': './src/index.js',
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      minify: false,
    }),
    new MiniCssExtractPlugin({
      filename: "[name]_[contenthash:8].css"
    }),
    new webpack.ProvidePlugin({
      $: 'jquery',  // 设置这个就不用import $ from './jquery.min.js'
    })
  ],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
    ],
  },
  optimization: {
    minimizer: [
      `...`,
      new CssMinimizerPlugin(),
    ],
  },
  output: {
    filename: '[name]_[contenthash:8].js',
    path: path.resolve(__dirname, 'dist'),
    clean: true, 
  },
  target: ['web','es5'],
};

 

坑:ie8  Object.defineProperty  

解决: 在HTML页面添加以下代码

<script>
  // ie8兼容
  var origDefineProperty = Object.defineProperty;
  var arePropertyDescriptorsSupported = function () {
    var obj = {};
    try {
      origDefineProperty(obj, "x", {enumerable: false, value: obj});
      for (var _ in obj) {
        return false;
      }
      return obj.x === obj;
    } catch (e) {
      /* this is IE 8. */
      return false;
    }
  };
  var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
  if (!supportsDescriptors) {
    Object.defineProperty = function (a, b, c) {
      //IE8支持修改元素节点的属性
      if (origDefineProperty && a.nodeType == 1) {
        return origDefineProperty(a, b, c);
      } else {
        a[b] = c.value || (c.get && c.get());
      }
    };
  }
</script>

 

加上jquery.js文件一起打包,,ie8还是不行,sad!!!不打包还行ie8还可以打开,打包后就不行了,啊啊啊

webpack5打包js+jquery项目

最后方案: jquery.js,单独加载,其他打包成一个js文件

 

 

ps:或许可以把项目中的jq代码去掉,参考这个https://youmightnotneedjquery.com/

 

上一篇:Webpack5.第二篇


下一篇:Webpack5实战笔记----上手webpack5