使用 babel 缩小 webpack 中的 ES6 代码

2024-04-13

我尝试过 Uglifyjs、babelli (babel-minify ) 等选项。似乎没有任何效果。Uglify 抛出一些如下错误:

预期名称 [au680.bundle.js:147541,22]

babelli 也不压缩代码。任何人都可以给出使用 webpack 2 babel 进行 es6 压缩的简单示例吗? 可能是一个可以干净地完成工作的插件。

var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var AppCachePlugin = require('appcache-webpack-plugin');

var appConfig= require('./config.js');
console.log("appConfig is ->>>",appConfig);
var appPort = appConfig.APP_PORT;//Port on which the application is running

process.noDeprecation = true;
var ASSET_PATH = '/'
module.exports = function(options) {
  var entry, jsLoaders, plugins, cssLoaders, devtool;
  console.log('options webconfig-->', options, 'directory name', __dirname);

  // If production is true
  if (options.prod) {
    console.log('production minification');
    // Entry
    entry = {
       veris:path.resolve(__dirname,'./VerisInstrument/js/VerisApp.js'),
       au680 : path.resolve(__dirname,'./Au680Instrument/js/au680App.js'),
	   commondashboard:path.resolve(__dirname,'./CommonDashboard/js/CommonDashboardApp.js'),
       groups:path.resolve(__dirname,'./Groups/js/GroupsApp.js'),
       homepage : path.resolve(__dirname,'./HomePage/js/HomePageApp.js'),
       infohealthcheck : path.resolve(__dirname,'./Common/js/infohealthcheckapp.js')
      
    };

   
    // Plugins
    plugins = [// Plugins for Webpack
    new webpack.DefinePlugin({
    'process.env': {
      'NODE_ENV': JSON.stringify('production')
    }
   }),
  //   new webpack.optimize.UglifyJsPlugin({minimize: true,comments : false,compress: {
  //   // remove warnings
  //   warnings: false,

  //   // Drop console statements
  //   drop_console: true
  // }})

    
      // new es3MemberExpressionLiterals(),
      //
      
    ];

  // If app is in development
  } else {
    devtool = 'source-map';
    // Entry
    // entry = [
    //   "webpack-dev-server/client?http://0.0.0.0:" + appPort, // Needed for hot reloading
    //   "webpack/hot/only-dev-server", // See above
    //   //path.resolve(__dirname,'./app') // Start with js/app.js...
    //   path.resolve(__dirname,'./VerisInstrument/js/VerisApp')
    // ];
  //   require("babel-core").transform("code", {
  //   plugins: ["transform-object-rest-spread"]
  // });
    entry = {
      main: [
        "webpack-dev-server/client?http://0.0.0.0:" + appPort, // Needed for hot reloading
        "webpack/hot/only-dev-server" // See above
      ],
      //path.resolve(__dirname,'./js/app') // Start with js/app.js...
     veris : path.resolve(__dirname,'./VerisInstrument/js/VerisApp'),
      au680 : path.resolve(__dirname,'./Au680Instrument/js/au680App.js'),
	  commondashboard:path.resolve(__dirname,'./CommonDashboard/js/CommonDashboardApp.js'),
      groups:path.resolve(__dirname,'./Groups/js/GroupsApp.js'),
      homepage : path.resolve(__dirname,'./HomePage/js/HomePageApp.js'),
      infohealthcheck : path.resolve(__dirname,'./Common/js/infohealthcheckapp.js')
      
    };
    
    // Only plugin is the hot module replacement plugin
    plugins = [
     new webpack.DefinePlugin({
    'process.env': {
      'NODE_ENV': JSON.stringify('development'),
      }
     }),
     new webpack.HotModuleReplacementPlugin()// Make hot loading work,
    ]
  }

  return {
    devtool: devtool,
    entry: entry,
    // output: { // Compile into js/build.js
    //   path: path.resolve(__dirname, 'build'),
    //   filename: "js/bundle.js",
    //   publicPath : '/'
    // },
    output: { // Compile into js/build.js
      path: path.resolve(__dirname, 'build'),
      filename: '[name].bundle.js',
      publicPath : ASSET_PATH
    },
    module: {
      rules: [
      {
          test: /\.js$/, // Transform all .js files required somewhere within an entry point...
          loader: 'babel-loader', // ...with the specified loaders...
          exclude: /node_modules/,
          options: {
          presets: ['es2015','react','stage-2','env'],
          plugins: [require('babel-plugin-transform-object-rest-spread'),require('babel-plugin-transform-es2015-destructuring'),require('babel-plugin-transform-es2015-parameters')]
        }
          // query : {
          //   presets : ['es2015','react','stage-2','env']
          // }

        }
        , {
          test:   /\.css$/, // Transform all .css files required somewhere within an entry point...
          use : [
            {
              loader : 'style-loader'
            },
            {
              loader : 'css-loader'
            },
            {
              loader : 'postcss-loader'
            },
            {
              loader: 'sass-loader'
            }
          ] // ...with PostCSS
        }, {
          test: /\.jpe?g$|\.gif$|\.png$/i,
          loader: "url-loader?limit=100000"
        },
        { test: /\.(woff|woff2|eot|ttf|svg)$/,
         loader: 'url-loader?limit=100000' }
      ]
    },
    plugins: plugins,
    target: "web", // Make web variables accessible to webpack, e.g. window
    stats: false, // Don't show stats in the console
    node: {
      fs: "empty"
    }
  }
}

Update

如果您不担心支持旧版浏览器,webpack v4+ 将在生产模式下默认缩小代码 https://webpack.js.org/guides/production/#minification:

webpack --mode=production

之前的回答

From https://github.com/webpack/webpack/issues/2545 https://github.com/webpack/webpack/issues/2545:

问题是 UglifyJS 还不支持 ES6,所以还无法避免这种转换。您可以在以下位置关注进度meesho/UglifyJS 2#448 https://github.com/mishoo/UglifyJS2/issues/448 .

解决办法有很多种;这里有几个:

首先转译 ES6 代码,然后缩小它
为了获得最大的兼容性,请使用 Babel 进行转译,然后使用 Babel Minify(以前称为 Babili)进行缩小:

  1. Install 巴别塔装载机 https://github.com/babel/babel-loader and babel-minify-webpack-插件 https://github.com/webpack-contrib/babel-minify-webpack-plugin

    npm install babel-loader babel-minify-webpack-plugin --save-dev
    

    Or:

    yarn add babel-loader babel-minify-webpack-plugin --dev
    
  2. 将其添加到 webpack.config.js 中:

    const MinifyPlugin = require('babel-minify-webpack-plugin');
    
    module.exports = {
      // ...
      module: {
        rules: [
          {
            test: /\.js$/,
            use: {
              loader: 'babel-loader',
              options: {
                presets: ['env']
              }
            }
          }
        ]
      },
      plugins: [
        new MinifyPlugin()
      ]
    };
    

    或者,如果您愿意,可以使用 UglifyJS 而不是 Babel Minify:

    const MinifyPlugin = require('uglifyjs-webpack-plugin');
    

无需转译即可缩小 ES6 代码
为了仅与支持您正在使用的 ES6 功能的浏览器兼容,请使用 Babel Minify 进行缩小而不进行转译:

  1. Install babel-minify-webpack-插件 https://github.com/webpack-contrib/babel-minify-webpack-plugin

    npm install babel-minify-webpack-plugin --save-dev
    

    Or:

    yarn add babel-minify-webpack-plugin --dev
    
  2. 将其添加到 webpack.config.js 中:

    const MinifyPlugin = require('babel-minify-webpack-plugin');
    
    module.exports = {
      // ...
      plugins: [
        new MinifyPlugin()
      ]
    };
    

Babel Minify 的默认设置对我来说效果很好,但您可以在此处查看更多可以自定义的选项:https://github.com/webpack-contrib/babel-minify-webpack-plugin https://github.com/webpack-contrib/babel-minify-webpack-plugin

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 babel 缩小 webpack 中的 ES6 代码 的相关文章

随机推荐

  • Ace 代码编辑器动态设置语言 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试通过下拉菜单来选择语言来实现 Ace 代码编辑器 我的下拉菜单有一个模式 ID 我已经让编辑器正常工作 但我无法像我希望
  • JNI 和 Java:ant 调用 make 还是 make 调用 ant?

    我即将第一次进入 JNI Java 本机接口 的世界 以提供从平台特定的 C C 代码到 Java 的文件系统更改通知 除非有人推荐一些我错过的出色的图书馆来做这件事 作为 JNI 的新手 我已经设法找到了很多关于 JNI 接口方面和库生成
  • 避免从存储过程返回结果集

    假设我有一些返回结果集的存储过程 并且我无法更改它 create procedure test procedure as begin select 1 end 我知道我可以将结果集插入表中 因此它将对调用代码隐藏 declare t tab
  • Worklight 在线 + 离线身份验证

    我正在尝试通过 Worklight 实现以下目标 我的应用程序有两组功能 仅当应用程序连接到服务器并且用户经过身份验证时才能访问一组功能 另一组功能可以离线访问 但它们需要来自加密 JSONStore 的数据 我在客户端设备上有一个 JSO
  • 距离矩阵的并行构造

    我对大量多维向量进行层次凝聚聚类 我注意到最大的瓶颈是距离矩阵的构造 此任务的简单实现如下 此处使用 Python v an array N d where rows are the observations and columns the
  • 运行 Jest 时 NextJS 中未定义环境变量

    我设置了一个简单的 NextJS 项目 但在让 Jest 识别我的环境变量时遇到问题 我已按照以下说明进行操作https nextjs org docs basic features environment variables test e
  • 微服务版本控制

    就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言 适应基于微服务的架构中的版本控制的最佳实践是什么 1 如果我们使用基于路由的版本控制作为提到的方法之一here http niels nu blog 2016 micro
  • 选择除第一个之外的所有“tr”

    我怎样才能选择全部tr除第一个元素之外的元素tr在带有 CSS 的表格中 我尝试使用this http www daniel lemire com blog archives 2008 08 22 how to select even or
  • 如何将函数中的多个变量移至全局范围?

    我是Python新手 我正在努力创建一个类似游戏的垄断 并且正在研究程序的设置方面 我有一个函数询问用户他们想要为每个设置输入什么 然后我使用另一个函数将这些设置导入到文本文件中 以便可以存储它们以供以后使用 也可以让程序将它们用作设置 这
  • 如何识别 RDP / MSTSC 登录失败的情况?

    我正在使用 RDP MSTSC 的 C 实现MsRdpClient9NotSafeForScripting 类 https learn microsoft com en us windows win32 termserv imstscaxe
  • 如何决定使用什么——双精度还是小数? [复制]

    这个问题在这里已经有答案了 可能的重复 十进制与双精度 我应该使用哪一种以及何时使用 https stackoverflow com questions 1165761 decimal vs double which one should
  • 如何将列表与 JPA Hibernate 中存在的所有值完全匹配?

    我有一个User实体与skills属性作为类型列表 我想查询的是User表格对照技能列表 如果所有技能都出现在技能列中 则仅找到匹配项 除非没有 我为此使用了 JPQL 但它使用以下命令逐一匹配列表中的每个元素IN clause 用户等级
  • 生成一个sql server表中不存在的随机数

    我正在寻找生成一个随机数 该生成的数字不存在于另一个表上 例如 如果一个表名为randomNums具有价值观10 20 30 40 50 我喜欢生成一个除上述值之外的数字 我尝试了以下查询 Query WITH CTE AS SELECT
  • 按列表中的值对查询集进行排序

    是否可以通过查询中提供的元素列表对 django 查询集进行排序 例如 如果我这样做 m objects filter id in 3 1 8 我不希望查询集的顺序是 id 3 的元素 id 1 的元素和 id 8 的元素 Thanks 既
  • React-router-dom 中的 Router 与 Route 有何不同

    在 React Router 中文档 https reacttraining com react router web guides quick start我已经看到它同时导入Route and Router模块来自react router
  • Grails 3.0.0.M1 - 将脚手架模板安装到我的 Grails 项目中

    我在 Grails 3 中可以获得的唯一模板install form fields templates are create gsp and edit gsp来自fields plugin 有没有机会再次安装和使用旧的 form gsp 字
  • 我们可以在 Xamarin 表单的选项卡页面上方添加内容吗?

    I want to add some label and image above tabbed page in xamarin forms so when i slide to another tabbed page the content
  • Visual Studio 2015:Ctrl+Shift+8 (View.PopBrowseContext) 导航回来不起作用?

    A keyboard shortcut that I ve used frequently going back several Visual Studio versions is Ctrl Shift 8 to go back to wh
  • 为什么我的 GAE 应用程序提供静态文件的延迟如此之高?

    我在 GAE 上检查 Go 应用程序的性能 我认为静态文件的响应时间相当长 183 毫秒 是吗 为什么 我能做什么呢 64 103 25 105 07 Feb 2013 04 10 03 0800 GET css bootstrap res
  • 使用 babel 缩小 webpack 中的 ES6 代码

    我尝试过 Uglifyjs babelli babel minify 等选项 似乎没有任何效果 Uglify 抛出一些如下错误 预期名称 au680 bundle js 147541 22 babelli 也不压缩代码 任何人都可以给出使用