Javascript UglifyJS使用节点_模块抛出意外标记:关键字(const)

Javascript UglifyJS使用节点_模块抛出意外标记:关键字(const),javascript,npm,gulp,babeljs,uglifyjs2,Javascript,Npm,Gulp,Babeljs,Uglifyjs2,我启动的一个小项目使用一个节点模块(通过npm安装),该模块声明const变量。运行和测试这个项目是很好的,但是在执行UglifyJS时browserify失败了 意外标记:关键字(常量) 这是一个通用的Gulp文件,我已经成功地将其用于过去几个没有这个问题的项目(即没有特定的节点模块) gulpfile.js “严格使用”; const browserify=require('browserify'); const gulp=需要(“gulp”); const source=require(‘

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

意外标记:关键字(常量)

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

gulpfile.js
“严格使用”;
const browserify=require('browserify');
const gulp=需要(“gulp”);
const source=require(‘乙烯基源流’);
const-derequire=require('gulp-derequire');
常量缓冲区=需要(“乙烯基缓冲区”);
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=大写(pkg.NAME);
吞咽任务('default',()=>{
//根据任务设置browserify实例
var b=browserify({
条目:输入_文件,
basedir:SRC_路径,
转换:['babelify'],
独立:模块名称,
调试:正确
});
返回b.bundle()
.pipe(源(输出文件))
.pipe(缓冲区())
.pipe(derequire())
.pipe(sourcemaps.init({loadMaps:true}))
.管道(丑()
.on('error',gutil.log)
.pipe(sourcemaps.write('.'))
.pipe(大口目的地(DIST_PATH))
;
});
我已尝试通过将npm安装模块中的所有
const
替换为
var
来修复此问题,一切正常。所以我不理解失败

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

有没有一种方法可以在不需要更改节点模块的情况下修复此问题

更新
我已经临时(或永久)将UglifyJS替换为,并且似乎有效。

UglifyJS不支持es6
const
是一个es6声明,因此它会抛出一个错误

奇怪的是,您使用的软件包没有将其文件传输到es5以便在任何地方使用

如果您仍想使用UglifyJS(例如重新使用配置),请使用ES6+兼容版本。(警告
uglify es
is。)

另外,您现在应该使用
更简洁的webpack插件

因为,UglifyJS根本不支持ES6

您需要使用ES6(webpack@5将使用此插件进行丑化)

然后在
插件
数组中定义

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

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

使用uglify es网页包插件更好

    const UglifyEsPlugin = require('uglify-es-webpack-plugin')



    module.exports = {
    plugins: [
            new UglifyEsPlugin({
                compress:{
                    drop_console: true
                }
            }),
    ] 
    }

在PHPStorm的GUI中,我已经用
YUI Compressor JS
替换了
UglifyJS
。。它现在可以工作了。

我刚刚重构了一个Gulp项目,但由于某种原因,我在官方的Terser Gulp插件上遇到了问题。(gulp terser)工作时没有任何问题。

我真的不认为这种方法是好的,但在我的情况下,我需要这样做一次,然后忘记这一点,所以我只是去了,在线将es6传输到es5并替换输出

我也遇到了同样的问题,gulp插件gulp uglify es解决了这个问题

我认为这是最简单的决定

只需安装:

npm i gulp-uglify-es --save-dev
之后,在代码中只更改这一行

const uglify = require('gulp-uglify');
为此:

const uglify = require('gulp-uglify-es').default;
注意:属性。默认值非常重要,否则您将出现一个错误,即uglify不是一个函数

如上所述,作为ES6const的一部分,运算符只能由更现代的ES6 gulp插件“gulp uglify es”处理

代码的其余部分不需要更改


致以最良好的祝愿

节点版本不是有问题吗?您不需要像node 8+那样有
const
可用吗?(不确定它实际上是什么时候引入的)我从v4开始就一直在使用
const
。我现在使用的是8.9.1 LTS。好吧,那就奇怪了。您看到的错误消息是什么?@this.lau uuu与标题中的错误消息相同,但为了清晰起见,我也在问题中添加了它。它不一定与“const”有关。它可能是您需要的模块之一。您也可以用
gulp uglify es
替换
gulp uglify
UglifyJS不支持es6
。非常感谢。我在任何地方都找不到这段信息。如果迁移到webpack超出预算,请使用
gulp-terser
。也许你应该建议
npm安装--保存dev-terser-webpack-plugin
。我真的很感激这个答案,因为它让我想起了
terser-webpack-plugin
下面使用的
terser
库。其他人注意:
terser
可以作为cli单独使用,就像
uglify js
一样(即webpack不是一个要求),这正是我需要的。但我们需要使用webpack来使用此解决方案?@enrique取决于您想要做什么,要建立一个符合实际业务需求的网站,你一定要尝试一下webpack。我们在webpack社区中遇到了这个问题,所以我的答案得到了很好的评价,但从技术上讲,您不需要webpack来构建ES6编码器webpack@4在这方面,请详细说明为什么它更好。测试并使用“节点:v12.14”、“gulp cli v2.2.1”、“gulp local v4.0.2”。
const uglify = require('gulp-uglify-es').default;