意外的标记:来自 UglifyJs 的运算符 (>)
Unexpected token: operator (>) from UglifyJs
我有 2 个 Vue-Cli webpack 项目(ClientApp 和 Lib)。
Lib 是我的组件库(与其他项目共享)
问题
当我构建项目 ClientApp npm 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 无法解析它。
在 Uglify 之前,Babel 不应该先走吗?
请注意,这适用于 *.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'),
}
},
如果需要,请随时询问更多详情。
更改我的 babel-loader 配置后,它起作用了。
Babel 加载器配置
{
test: /\.js$/,
loader: 'babel-loader',
include: [path.join(__dirname, '../../Lib/src'), resolve('src'), resolve('test')]
}
您使用的 uglify 版本可能不支持 ES6。
https://github.com/mishoo/UglifyJS2/tree/harmony 是目前的 es6 版本
如果你想使用 webpack plugin,一定要注意关于 es6 的安装部分
Important! The plugin has a peer dependency to uglify-js, so in order to use the plugin, also uglify-js has to be installed. The
currently (2017/1/25) available uglify-js npm packages; however, do
not support minification of ES6 code. In order to support ES6, an
ES6-capable, a.k.a. harmony, version of UglifyJS has to be provided.
If your minification target is ES6:
yarn add git://github.com/mishoo/UglifyJS2#harmony-v2.8.22 --dev
添加
"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
而不是能够转译 ES6 的 uglify-es
。此依赖项已在 1.0.0-beta.1 版本中更新。
https://github.com/webpack-contrib/uglifyjs-webpack-plugin/releases/tag/v1.0.0-beta.1
这解决了我的问题。
我安装了 uglifyjs-webpack-plugin
npm install uglifyjs-webpack-plugin --save-dev
然后将其添加到我的 webpack.config
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
plugins: [
new UglifyJSPlugin()
]
}
我有 2 个 Vue-Cli webpack 项目(ClientApp 和 Lib)。 Lib 是我的组件库(与其他项目共享)
问题
当我构建项目 ClientApp npm 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 无法解析它。
在 Uglify 之前,Babel 不应该先走吗?
请注意,这适用于 *.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'),
}
},
如果需要,请随时询问更多详情。
更改我的 babel-loader 配置后,它起作用了。
Babel 加载器配置
{
test: /\.js$/,
loader: 'babel-loader',
include: [path.join(__dirname, '../../Lib/src'), resolve('src'), resolve('test')]
}
您使用的 uglify 版本可能不支持 ES6。
https://github.com/mishoo/UglifyJS2/tree/harmony 是目前的 es6 版本
如果你想使用 webpack plugin,一定要注意关于 es6 的安装部分
Important! The plugin has a peer dependency to uglify-js, so in order to use the plugin, also uglify-js has to be installed. The currently (2017/1/25) available uglify-js npm packages; however, do not support minification of ES6 code. In order to support ES6, an ES6-capable, a.k.a. harmony, version of UglifyJS has to be provided.
If your minification target is ES6:
yarn add git://github.com/mishoo/UglifyJS2#harmony-v2.8.22 --dev
添加
"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
而不是能够转译 ES6 的 uglify-es
。此依赖项已在 1.0.0-beta.1 版本中更新。
https://github.com/webpack-contrib/uglifyjs-webpack-plugin/releases/tag/v1.0.0-beta.1
这解决了我的问题。
我安装了 uglifyjs-webpack-plugin
npm install uglifyjs-webpack-plugin --save-dev
然后将其添加到我的 webpack.config
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
plugins: [
new UglifyJSPlugin()
]
}