UglifyJS 抛出意外的标记:keyword (const) with node_modules

UglifyJS throws unexpected token: keyword (const) with node_modules(UglifyJS 抛出意外的标记:keyword (const) with node_modules)
本文介绍了UglifyJS 抛出意外的标记:keyword (const) with node_modules的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我开始的一个小项目使用声明 const 变量的节点模块(通过 npm 安装).运行测试这个项目很好,但是执行UglifyJS时browserify失败了.

A small project I started make use a node module (installed via npm) that declares const variables. Running and testing this project is well, but browserify fails when UglifyJS is executed.

意外标记:关键字(const)

Unexpected token: keyword (const)

这是一个通用的 Gulp 文件,我已经成功地将它用于过去的一些其他项目而没有这个问题(即没有那个特定的节点模块).

Here is a generic Gulp file that I have successfully been using for a few other past projects without this issue (i.e. without that particular node module).

'use strict';

const browserify = require('browserify');
const gulp = require('gulp');
const source = require('vinyl-source-stream');
const derequire = require('gulp-derequire');
const buffer = require('vinyl-buffer');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
const gutil = require('gulp-util');
const path = require('path');
const pkg = require('./package');
const upperCamelCase = require('uppercamelcase');

const SRC_PATH = path.dirname(pkg.main);
const DIST_PATH = path.dirname(pkg.browser);

const INPUT_FILE = path.basename(pkg.main);
const OUTPUT_FILE = path.basename(pkg.browser);

const MODULE_NAME = upperCamelCase(pkg.name);


gulp.task('default', () => {
  // set up the browserify instance on a task basis
  var b = browserify({
    entries: INPUT_FILE,
    basedir: SRC_PATH,
    transform: ['babelify'],
    standalone: MODULE_NAME,
    debug: true
  });

  return b.bundle()
    .pipe(source(OUTPUT_FILE))
    .pipe(buffer())
    .pipe(derequire())
    .pipe(sourcemaps.init({loadMaps: true}))
    .pipe(uglify())
    .on('error', gutil.log)
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest(DIST_PATH))
  ;
});

我已尝试通过将 npm 安装的模块中的所有 const 替换为 var 来解决此问题,一切都很好.所以我不理解失败.

I have tried fixing this by replace all const to var in that npm-installed module, and everything is fine. So I do not understand the failure.

const 有什么问题?除非有人使用 IE10,否则所有主流浏览器都支持这种语法.

What's wrong with const? Unless someone uses IE10, all major browsers support this syntax.

有没有办法解决这个问题而无需更改该节点模块?

Is there a way to fix this without requiring a change to that node module?

我已经暂时(或永久)用 Butternut 替换了 UglifyJS,并且似乎可以工作.

I have temporarily (or permanently) replaced UglifyJS with Butternut and seem to work.

推荐答案

由于ChrisR 提到,UglifyJS 不支持 ES6完全没有.

As ChrisR mentionned, UglifyJS does not support ES6 at all.

ES6 需要使用 terser-webpack-plugin (webpack@5会使用这个插件进行丑化)

You need to use terser-webpack-plugin for ES6 (webpack@5 will use this plugin for uglification)

npm install terser-webpack-plugin --save-dev

然后在你的 plugins 数组中定义

Then define in your plugins array

const TerserPlugin = require('terser-webpack-plugin')

  new TerserPlugin({
    parallel: true,
    terserOptions: {
      ecma: 6,
    },
  }),

来源

这篇关于UglifyJS 抛出意外的标记:keyword (const) with node_modules的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do I can get a text of all the cells of the table using testcafe(如何使用 testcafe 获取表格中所有单元格的文本)
node_modules is not recognized as an internal or external command(node_modules 未被识别为内部或外部命令)
How can I create conditional test cases using Protractor?(如何使用 Protractor 创建条件测试用例?)
PhantomJS and clicking a form button(PhantomJS 并单击表单按钮)
Clicking #39;OK#39; on alert or confirm dialog through jquery/javascript?(在警报上单击“确定或通过 jquery/javascript 确认对话框?)
QunitJS-Tests don#39;t start: PhantomJS timed out, possibly due to a missing QUnit start() call(QunitJS-Tests 不启动:PhantomJS 超时,可能是由于缺少 QUnit start() 调用)