Report an error under ie11 after vue-cli 2. 0 is packaged

problem description

  1. the packaged vue-cli code ie 11 reported an error and could not open the page (two pages of the project, the login page can be opened, and the home page cannot be opened).
  2. what is a little strange is that the development-time service started by npm run dev can run normally under ie, but it will report an error when it is packaged.

explanation of the reason for reporting an error

the packaged compressed file has a class syntax, but I found a file in [the compressed file] .map that uses es6"s class api.

 /

  • webpack.base.conf.jsbabel

entries() =>
{
    login: "path1",
    main: "path2"
}
  • both entries have import "babel-polyfill" to convert es6 and add api
  • webpack.prod.conf.js

    "use strict"
    const path = require("path")
    const utils = require("./utils")
    const webpack = require("webpack")
    const config = require("../config")
    const merge = require("webpack-merge")
    const baseWebpackConfig = require("./webpack.base.conf")
    const CopyWebpackPlugin = require("copy-webpack-plugin")
    const HtmlWebpackPlugin = require("html-webpack-plugin")
    const ExtractTextPlugin = require("extract-text-webpack-plugin")
    const OptimizeCSSPlugin = require("optimize-css-assets-webpack-plugin")
    const UglifyJsPlugin = require("uglifyjs-webpack-plugin")
    
    const env = require("../config/prod.env")
    
    const webpackConfig = merge(baseWebpackConfig, {
      module: {
        rules: utils.styleLoaders({
          sourceMap: config.build.productionSourceMap,
          extract: true,
          usePostCSS: true
        })
      },
      devtool: config.build.productionSourceMap ? config.build.devtool : false,
      output: {
        path: config.build.assetsRoot,
        filename: utils.assetsPath("js/[name].[chunkhash].js"),
        chunkFilename: utils.assetsPath("js/[id].[chunkhash].js")
      },
      plugins: [
        // http://vuejs.github.io/vue-loader/en/workflow/production.html
        new webpack.DefinePlugin({
          "process.env": env
        }),
        new UglifyJsPlugin({
          uglifyOptions: {
            compress: {
              warnings: false
            }
          },
          sourceMap: config.build.productionSourceMap,
          parallel: true
        }),
        // extract css into its own file
        new ExtractTextPlugin({
          filename: utils.assetsPath("css/[name].[contenthash].css"),
          // Setting the following option to `false` will not extract CSS from codesplit chunks.
          // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
          // It"s currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it"s `false`,
          // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
          allChunks: true,
        }),
        // Compress extracted CSS. We are using this plugin so that possible
        // duplicated CSS from different components can be deduped.
        new OptimizeCSSPlugin({
          cssProcessorOptions: config.build.productionSourceMap
            ? { safe: true, map: { inline: false } }
            : { safe: true }
        }),
        // generate dist index.html with correct asset hash for caching.
        // you can customize output by editing /index.html
        // see https://github.com/ampedandwired/html-webpack-plugin
        // new HtmlWebpackPlugin({
        //   filename: config.build.index,
        //   template: "index.html",
        //   inject: true,
        //   minify: {
        //     removeComments: true,
        //     collapseWhitespace: true,
        //     removeAttributeQuotes: true
        //     // more options:
        //     // https://github.com/kangax/html-minifier-sharpoptions-quick-reference
        //   },
        //   // necessary to consistently work with multiple chunks via CommonsChunkPlugin
        //   chunksSortMode: "dependency"
        // }),
    
        // keep module.id stable when vendor modules does not change
        new webpack.HashedModuleIdsPlugin(),
        // enable scope hoisting
        new webpack.optimize.ModuleConcatenationPlugin(),
        // split vendor js into its own file
        new webpack.optimize.CommonsChunkPlugin({
          name: "vendor",
          minChunks (module) {
            // any required modules inside node_modules are extracted to vendor
            return (
              module.resource &&
              /\.js$/.test(module.resource) &&
              module.resource.indexOf(
                path.join(__dirname, "../node_modules")
              ) === 0
            )
          }
        }),
        // extract webpack runtime and module manifest to its own file in order to
        // prevent vendor hash from being updated whenever app bundle is updated
        new webpack.optimize.CommonsChunkPlugin({
          name: "manifest",
          minChunks: Infinity
        }),
        // This instance extracts shared chunks from code splitted chunks and bundles them
        // in a separate chunk, similar to the vendor chunk
        // see: https://webpack.js.org/plugins/commons-chunk-plugin/-sharpextra-async-commons-chunk
        new webpack.optimize.CommonsChunkPlugin({
          name: "app",
          async: "vendor-async",
          children: true,
          minChunks: 3
        }),
    
        // copy custom static assets
        new CopyWebpackPlugin([
          {
            from: path.resolve(__dirname, "../static"),
            to: config.build.assetsSubDirectory,
            ignore: [".*"]
          }
        ])
      ].concat(utils.htmlPlugin())
    })
    
    if (config.build.productionGzip) {
      const CompressionWebpackPlugin = require("compression-webpack-plugin")
    
      webpackConfig.plugins.push(
        new CompressionWebpackPlugin({
          asset: "[path].gz[query]",
          algorithm: "gzip",
          test: new RegExp(
            "\\.(" +
            config.build.productionGzipExtensions.join("|") +
            ")$"
          ),
          threshold: 10240,
          minRatio: 0.8
        })
      )
    }
    
    if (config.build.bundleAnalyzerReport) {
      const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin
      webpackConfig.plugins.push(new BundleAnalyzerPlugin())
    }
    
    module.exports = webpackConfig    
    
Sexy programmers wait for answers online ing
May.06,2021

try to remove uglyfy

PS: [the compressed file]. Map is a mapping file for source map. Can you find something in it?


take a look at the configuration file of prod


check .browserslistrc (or the browserlist option in package.json ) in the project root directory to check whether it is set correctly. Generally, projects built with Vue CLI scaffolding default to:

.
> 1%
last 2 versions
not ie <= 8

if ie < = 8 is set, it will be correctly converted to es5 syntax.


Hello, I have encountered exactly the same problem as you. Ie works normally under npm run dev, but it doesn't work after packaging. Can you tell me the solution


later, I upgraded babel to 7 and redid my knowledge about babel, and I never encountered a similar problem again.

there are too many contents to answer. For more information, please see babel-loader user Guide

.
Menu