[webpack] UglifyJs Unexpected token name

使用webpack打包的时候会出现Unexpected token: name的问题,
是因为在webpack.config.js中的loaders过滤了node_modules,但是有依赖的模块需要进行babel处理,如下

{
  test: /.js[x]?$/,
  include: [
    path.resolve(__dirname, 'src'),
  ],
  exclude: /node_modules/,
  loaders: ['babel-loader', 'eslint-loader']
}

打包时报如下

...
ERROR in js/app.beef0790.js from UglifyJs
Unexpected token: name (result) [js/app....]
...

经过排查分析,是因为依赖的模块中asn1.jslib/asn1/base/node.js使用了let result语法,只需要修改一下includeexclude

{
  test: /.js[x]?$/,
  include: [
    path.resolve(__dirname, 'src'),
    /asn1/, // fix UglifyJs Unexpected token: name (result)
  ],
  // exclude: /node_modules/,
  loaders: ['babel-loader', 'eslint-loader']
}

如果出现其他token,需要根据token的名称定位到具体的模块。

以下是具体的分析过程。
先搜索

$ cd node_modules
$ grep "Unexpected token:" . -nR
...
./webpack/node_modules/uglify-js/lib/parse.js

找到抛出异常的位置,打印报错文件的上下文

...
console.log('Unexpected context =>', $TEXT.split('\n').slice(token.line - 2, token.endline + 4));
token_error(token, "Unexpected token1: " + token.type + " (" + token.value + ")");

再次执行可以看到报错的上下文代码

Unexpected context => [ '',
  '  let result = state[\'default\'];',
  '  let present = true;',
  '',
  '  let prevKey = null;',
  '  if (state.key !== null)' ]

再根据报错的上下文代码搜索到指定的模块

$ grep "let result = state" . -nR
./asn1.js/lib/asn1/base/node.js:282:  let result = state['default'];

定位到是asn1.js模块有问题,需要进行babel处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值