iview admin项目npm run build 打包时UglifyJs报错

问题描述

iview admin项目npm run build 打包时UglifyJs报错(ERROR in 1.2db93f96dd466683d093.chunk.js from UglifyJs Unexpected token: operator (>) [1.2db93f96dd466683d093.chunk.js:46439,43])

问题出现的环境背景及自己尝试过哪些方法

在打包后的文件1.2db93f96dd466683d093.chunk.js查看>应该识别错误,分析有可能是因为UglifyJs对es6语法解析转义出现了问题,在网上寻找了一些配置更改的方法还是无效,请大家帮忙看看,有什么方法可以解决。

相关代码

打包文件报错行

Object.keys(Methods).forEach((methodName) => {
  __WEBPACK_IMPORTED_MODULE_0_dom7_dist_dom7_modular__["a" /* $ */].fn[methodName] = Methods[methodName];
});


报错详细信息

ERROR in 1.2db93f96dd466683d093.chunk.js from UglifyJs
Unexpected token: operator (>) [1.2db93f96dd466683d093.chunk.js:46439,43]
Child html-webpack-plugin for "..\index.html":
     1 asset
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js?minimize!node_modules/autoprefixer-loader/index.js!node_modules/element-ui/lib/theme-chalk/index.css:
                                    Asset     Size  Chunks             Chunk Names
    2fad952a20fbbcfd1bf2ebb210dccf7a.woff  6.16 kB          [emitted]
     6f0a76321d30f3c8120915e57f7bd77e.ttf    11 kB          [emitted]
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js?minimize!node_modules/autoprefixer-loader/index.js!node_modules/iview/dist/styles/iview.css:
                                    Asset     Size  Chunks                    Chunk Names
     2c2ae068be3b089e0a5b59abb1831550.eot   121 kB          [emitted]
     24712f6c47821394fba7942fbb52c3b2.ttf   189 kB          [emitted]
    05acfdb568b3df49ad31355b19495d4a.woff  67.9 kB          [emitted]
     621bd386841f74e0053cb8e67f8a0604.svg   334 kB          [emitted]  [big]
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! iview-admin@1.3.1 build: `webpack --progress --hide-modules --config build/webpack.prod.config.js`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the iview-admin@1.3.1 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\S\AppData\Roaming\npm-cache\_logs\2018-07-13T02_51_42_530Z-debug.log

webpack.base.config文件代码

const path = require('path');
const os = require('os');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HappyPack = require('happypack');
var happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
function resolve (dir) {
    return path.join(__dirname, dir);
}
module.exports = {
    entry: {
        main: '@/main',
        'vender-base': '@/vendors/vendors.base.js',
        'vender-exten': '@/vendors/vendors.exten.js'
    },
    output: {
        path: path.resolve(__dirname, '../dist/dist')
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    loaders: {
                        css: 'vue-style-loader!css-loader',
                        less: 'vue-style-loader!css-loader!less-loader'
                    },
                    postLoaders: {
                        html: 'babel-loader'
                    }
                }
            },
            {
                test: /iview\/.*?js$/,
                loader: 'happypack/loader?id=happybabel',
                exclude: /node_modules/
            },
            {
                test: /\.js$/,
                loader: 'happypack/loader?id=happybabel',
                exclude: /node_modules/
            },
            {
                test: /\.js[x]?$/,
                include: [resolve('src')],
                exclude: /node_modules/,
                loader: 'happypack/loader?id=happybabel'
            },
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    use: ['css-loader?minimize', 'autoprefixer-loader'],
                    fallback: 'style-loader'
                })
            },
            {
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                    use: ['css-loader?minimize','autoprefixer-loader', 'less-loader'],
                    fallback: 'style-loader'
                }),
            },
            {
                test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/,
                loader: 'url-loader?limit=1024'
            },
            {
                test: /\.(html|tpl)$/,
                loader: 'html-loader'
            }
        ]
    },
    plugins: [
        new HappyPack({
            id: 'happybabel',
            loaders: ['babel-loader'],
            threadPool: happyThreadPool,
            verbose: true
        }),
        new webpack.ProvidePlugin({
            jQuery: "jquery",
            $: "jquery"
        })
    ],
    resolve: {
        extensions: ['.js', '.vue'],
        alias: {
            'vue': 'vue/dist/vue.esm.js',
            '@': resolve('../src'),
        }
    }
};

webpack.prod.config文件代码

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const cleanWebpackPlugin = require('clean-webpack-plugin');
const UglifyJsParallelPlugin = require('webpack-uglify-parallel');
const merge = require('webpack-merge');
const webpackBaseConfig = require('./webpack.base.config.js');
const os = require('os');
const fs = require('fs');
const path = require('path');
const package = require('../package.json');


fs.open('./build/env.js', 'w', function(err, fd) {
    const buf = 'export default "production";';
    fs.write(fd, buf, 0, buf.length, 0, function(err, written, buffer) {});
});

module.exports = merge(webpackBaseConfig, {
    output: {
        publicPath: 'https://screen.lotusdata.com/dist/',  // 修改 https://iv...admin 这部分为你的服务器域名 
        filename: '[name].[hash].js',
        chunkFilename: '[name].[hash].chunk.js'
    },
    plugins: [
        new cleanWebpackPlugin(['dist/*'], {
            root: path.resolve(__dirname, '../')
        }),
        new ExtractTextPlugin({
            filename: '[name].[hash].css',
            allChunks: true
        }),
        new webpack.optimize.CommonsChunkPlugin({
            // name: 'vendors',
            // filename: 'vendors.[hash].js'
            name: ['vender-exten', 'vender-base'],
            minChunks: Infinity
        }),
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"production"'
            }
        }),
       
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false
            }
        }),
        
        // new UglifyJsParallelPlugin({
        //     workers: os.cpus().length,
        //     mangle: true,
        //     compressor: {
        //       warnings: false,
        //       drop_console: true,
        //       drop_debugger: true
        //      }
        // }),
        new CopyWebpackPlugin([
            {
                from: 'td_icon.ico'
            },
            {
                from: 'src/styles/fonts',
                to: 'fonts'
            },
            {
                from: 'src/views/main-components/theme-switch/theme'
            },
            {
                from: 'src/views/my-components/text-editor/tinymce'
            }
        ], {
            ignore: [
                'text-editor.vue'
            ]
        }),
        new HtmlWebpackPlugin({
            title: '医图视界 v' + package.version,
            favicon: './td_icon.ico',
            filename: '../index.html',
            template: '!!ejs-loader!./src/template/index.ejs',
            inject: false
        })
    ]
});

.babelrc文件代码

{
    "presets": ["stage-3", "env"],
    "plugins": ["transform-runtime", "syntax-dynamic-import"],
    "comments": false
}


你期待的结果是什么?实际看到的错误信息又是什么?

阅读 10.7k
3 个回答

踩了一天这个坑,终于跳出来了,根据自己的webpack.base.config.js所在的目录,打包的时候相应的include需要babel的路径,路径一定要正确,且include 和 exclude不能共用,或者说不能同时作用于同一个目录吧。
按正常的逻辑。node_modules 里的文件应该不包含es6的代码才对
{

test: /\.js$/,
loader: 'happypack/loader?id=happybabel',
include: [resolve('../build'), resolve('../src'), resolve('../node_modules/iview/src'), resolve('../node_modules/iview/dist')]

}

clipboard.png
老铁我是将整个node_modules都引进去了(里面还有其他的不知道哪些用了ES6写的插件),build不报错了,但是项目放到服务器上,一些方法反而识别不出来了,能帮忙看下么[/捂脸]

clipboard.png

找到问题了,不能将整个node_modules引入,必须要找到目标文件夹,有点麻烦,不知道有没有更好的办法

clipboard.png

新手上路,请多包涵

请问楼主解决了么,遇到同样问题,按楼上两位的方法也没有解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题