javascript - UglifyJS 抛出意外 token : keyword (const) with node_modules

标签 javascript npm gulp babeljs uglifyjs2

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

Unexpected token: keyword (const)

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

gulp文件.js

'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 来修复此问题,一切正常。所以我不明白失败。

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

有没有办法在不需要更改节点模块的情况下解决这个问题?

更新

我暂时(或永久)将 UglifyJS 替换为 Butternut并且似乎有效。

最佳答案

作为ChrisR mentionned , UglifyJS 根本不支持 ES6。

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

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

然后在你的plugins数组中定义

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

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

Source

关于javascript - UglifyJS 抛出意外 token : keyword (const) with node_modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47439067/

相关文章:

windows - 在 Windows 10 Bash 上安装 webpack(Windows 上的 Ubuntu 上的 Bash)。继续获取 "webpack: command not found"

reactjs - 如何使 cherry-pick react 组件库,如 lodash 和日期/fns

node.js - 如何设置 NODE_ENV?

mysql - Gulp.js - 部署 MYSQL 数据库

node.js - 错误: Cannot find module 'gulp-serve'

javascript - 添加授权以 react 路由器

javascript - 我可以等待 DOM 事件解决吗?

javascript - 导出默认值并声明匿名函数

javascript - Highcharts:使用 CSV 预处理数据

reactjs - 在节点模块文件夹中编辑react npm模块的代码