vlambda博客
学习文章列表

解决vue打包报错UglifyJs

报错

 
   
   
 
  1. ERROR in js/xxxxxx.js from UglifyJs

  2. Unexpected token: name «Dom7», expected: punc «;» [js/chunk-3068

产生

在vue配置中,由于各插件版本兼容性差异可能会引发此问题的产生。 UglifyJs是一款可以解析、混淆、压缩JS的工具,此处的UglifyJs是配置在脚手架/webpack中,运行在node环境中的小插件。关于UglifyJs:

  1. uglify-js@3具有简化的API和CLI,该API和CLI与不能向后兼容uglify-js@2。

  2. UglifyJS 2.x版本的文档可以在这里找到。

  3. glify-js 仅支持JavaScript(ECMAScript 5)。

  4. 要缩小ECMAScript 2015或更高版本,请使用Babel之类的工具进行翻译。

解决

低版本:

  • 原因:UglifyJs不支持ES6语法,因此报错。

  • 解决方案:项目根目录下创建文件 .babelrc,配置如下

 
   
   
 
  1. {

  2. "pressets": ["es2015"]

  3. }

高版本:

  • 原因1:UglifyJs版本过低

  • 解决方案:升级UglifyJs版本

 
   
   
 
  1. npm install uglify-js -g

  • 原因2: babel 转译问题

  • 解决方案:找到babel的配置项 transpileDependencies,如下操作:

 
   
   
 
  1. // 旧

  2. transpileDependencies: [

  3. /* string or regex */

  4. ],


  5. // 改为如下⬇️


  6. // 新

  7. transpileDependencies: [

  8. 'vue-particles',

  9. 'animejs'

  10. ],

重新打包

npm run build,完毕。

[email protected] vue.config.js配置混淆压缩代js及去除console(缺少的插件先安装上)

 
   
   
 
  1. // 去除console

  2. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');


  3. // 压缩css、js

  4. const CompressionWebpackPlugin = require('compression-webpack-plugin');


  5. // 要压缩的文件

  6. const productionGzipExtensions = ['js', 'css'];



  7. module.exports = {

  8. // something else codes


  9. configureWebpack: (config) => {

  10. // 如果不是开发环境

  11. if (env !== 'development') {

  12. // 代码压缩

  13. config.plugins.push(new CompressionWebpackPlugin({

  14. algorithm: 'gzip',

  15. test: new RegExp(`\\.(${productionGzipExtensions.join('|')})$`),

  16. threshold: 10240,

  17. minRatio: 0.8,

  18. }));


  19. // 打包后清除断点和控制台打印

  20. config.plugins.push(

  21. new UglifyJsPlugin({

  22. uglifyOptions: {

  23. compress: {

  24. drop_debugger: true, // 注释debugger

  25. drop_console: true, // 注释console

  26. pure_funcs:['console.log'] // 移除console

  27. },

  28. },

  29. sourceMap: false, // 去除打包后生成的.map文件

  30. parallel: true,

  31. }),


  32. );

  33. }

  34. },

  35. }


希望能够解决您的问题。