Javascript UglifyJS使用节点_模块抛出意外标记:关键字(const)
我启动的一个小项目使用一个节点模块(通过npm安装),该模块声明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(‘
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;