我尝试过诸如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'),'./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,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','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" } } }
解决方法
从
https://github.com/webpack/webpack/issues/2545开始:
The problem is that UglifyJS doesn’t support ES6 yet so it’s not possible to avoid that transformation yet. You can follow the progress at 07001 .
有很多解决方案;这是一对夫妇:
首先透明ES6代码,然后缩小它
为了获得最大的兼容性,使用Babel进行转换,然后使用Babel Minify(以前的Babili)缩小:
>安装babel-loader和babel-minify-webpack-plugin
npm install babel-loader babel-minify-webpack-plugin --save-dev
要么:
yarn add babel-loader babel-minify-webpack-plugin --dev
>将此添加到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进行缩小而不进行转换:
>安装babel-minify-webpack-plugin
npm install babel-minify-webpack-plugin --save-dev
要么:
yarn add babel-minify-webpack-plugin --dev
>将此添加到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