14

我有 2 个 Vue-Cli webpack 项目(ClientApp 和 Lib)。Lib 是我的组件库(与其他项目共享)

问题

当我构建我的项目 ClientAppnpm run build时,出现以下错误:

ERROR in static/js/app.d08a24ce0e8d0438ce68.js from UglifyJs
Unexpected token: operator (>) [C:/.../Lib/src/tools/escape-key.js:3,0][static/js/app.d08a24ce0e8d0438ce68.js:17468,38]

问题

似乎错误来自文件中的箭头函数escape-key.js。这是 ES6 语法,UglifyJS 无法解析。Babel 不应该在 Uglify 之前先走吗?请注意,这适用于*.vue文件。

项目结构

ClientApp
   | - build
   | - config
   | - src
       | - App.Vue // import EscapeKey from '~lib/tools/escape-key';



Lib
  | -src
     | - tools
         | - escape-key.js

ClientApp 的 webpack.base.conf.js 文件

请注意,Lib 有一个别名。

resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      '@': resolve('src'),
      '~lib': path.join(__dirname, '../../lib/src'),
    }
  },

如果需要,请随时询问更多详细信息。

4

4 回答 4

10

添加

"uglifyjs-webpack-plugin": "v1.0.0-beta.1",

到您的开发依赖项并更新您的webpack.config.js文件以明确使用此版本:

const UglifyJSPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
  plugins: [
    new UglifyJSPlugin()
  ]
}

uglifyjs-webpack-plugin 最新稳定版本(v0.4.6)使用旧版本uglify-js而不是uglify-es能够转译 ES6。此依赖项已在 1.0.0-beta.1 版本中更新。

https://github.com/webpack-contrib/uglifyjs-webpack-plugin/releases/tag/v1.0.0-beta.1

于 2017-09-05T12:11:05.927 回答
5

这为我解决了这个问题。我安装了uglifyjs-webpack-plugin

npm install uglifyjs-webpack-plugin --save-dev

然后将此添加到我的webpack.config

const UglifyJSPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
  plugins: [
    new UglifyJSPlugin()
  ]
}
于 2017-10-26T12:50:20.293 回答
4

您使用的 uglify 版本可能不支持 ES6。

https://github.com/mishoo/UglifyJS2/tree/harmony是目前的 es6 版本

如果你想使用 webpack插件,请务必注意关于 es6 的安装部分

重要的!该插件对 uglify-js 具有对等依赖项,因此为了使用该插件,还必须安装 uglify-js。当前 (2017/1/25) 可用的 uglify-js npm 包;但是,不支持缩小 ES6 代码。为了支持 ES6,必须提供支持 ES6 的,也就是Harmony 的UglifyJS版本。

如果您的缩小目标是 ES6:

yarn add git://github.com/mishoo/UglifyJS2#harmony-v2.8.22 --dev

于 2017-07-12T15:20:00.567 回答
2

更改我的 babel-loader 配置后,它起作用了。

Babel-loader 配置

{
  test: /\.js$/,
  loader: 'babel-loader',
  include: [path.join(__dirname, '../../Lib/src'), resolve('src'), resolve('test')]
}
于 2017-05-10T13:02:04.520 回答