今天在封装自己的npm模块时,出现了一个问题,如下:

ERROR in .....js from UglifyJs
Unexpected token: name (n) [./node_modules/mapbox-gl/dist/mapbox-gl.js:31,3706]

之前是可以正常执行npm run build的,今天只是将mapbox-gl的版本从1.3.0升级到了2.9.1,就无法构建项目了,执行npm run dev是没有问题的。测试更换很多组件都是不解决问题的。

原因

extract-text-webpack-plugin这个插件里使用了UglifyJs,而UglifyJs是不支持ES6的语法的。出现这个问题,就是因为mapbox-gl的新版本里使用了ES6的语法。

虽然项目里配置了ES6语法自动转ES5,但是看看下面webpack.config.js的配置就知道了,默认node_modules下的所有模块是不参与转换的,因为这会增加npm run build的时间,并会增大失败的概率。

      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },

解决办法

其实,从前面的错误代码中,可以看到错误出现在编译哪个模块的时候,我的就是出现了mapbox-gl模块。

我们只需要配置额外的将这个模块转换到ES5就可以了。exclude的权重比include高,我们只能像下面这样配置。

{
        test: /\.js$/,
        loader: 'babel-loader',
        include: [
          path.resolve(__dirname,'./src'),
          path.resolve(__dirname,'./node_modules/mapbox-gl')
        ],
      },

配置完成之后,重新执行npm run build,发现成功了,但是构建的时间边长了。

Logo

前往低代码交流专区

更多推荐