我正在运行grunt uglify任务来缩小我的js文件,但是当字符串以`character开头时,它给了我错误。
我的字符串看起来像这样
var html = `<div class='list-item'>
<span>ABC</span>
</div>`;
我的Gruntfile.js uglifyjs块就像这样
uglify: {
'dev': {
options: {
mangle: false
},
files: {
'common/utility_functions.js': ['common/utility_functions.js']
}
}
}
当我运行grunt uglify时,它会给我以下错误
>> Uglifying source common/utility_functions.js failed.
Warning: Uglification failed.
SyntaxError: Unexpected character '`'.
Line 162 in common/utility_functions.js
Use --force to continue.
任何人都可以帮忙解决这个问题吗?我认为使用`字符是有效的。它在jshint过程中没有给我错误,因为我在jshint选项中添加了enext:true。
答案 0 :(得分:9)
grunt-contrib-uglify-es版本现已发布到npm。这是我在GitHub上的和谐分支,我在之前的更新答案中提到过。但是,它可以通过运行以下命令的npm直接安装:
npm i -D grunt-contrib-uglify-es
自回答此问题后,grunt-contrib-uglify
的{{3}}分支已可用。此版本处理harmony和其他ES6语法功能。
安装grunt-contrib-uglify
的和谐分支:
首先通过CLI运行以下命令,卸载当前版本的grunt-contrib-uglify
:
npm un -D grunt-contrib-uglify
接下来通过运行以下来安装和声分支:
npm i -D https://github.com/gruntjs/grunt-contrib-uglify.git#harmony
(注意harmony
分支在npm注册表中不可用,所以我们直接通过GitHub安装它
您的package.json
现在将包含以下代码段:
...
"devDependencies": {
...
"grunt-contrib-uglify-es": "git+https://github.com/gruntjs/grunt-contrib-uglify.git#harmony"
...
}
...
按正常方式运行uglify
任务,您将不会遇到错误消息。
您的字符串使用ES6 Template Literals语法,ES6 Template Literal(grunt-contrib-uglify
使用的JavaScript解析器/管理器/压缩器)不支持此功能。
有关详细信息,请参阅此uglify-js的答案。
如果您的项目需要使用ES6功能,请考虑使用post之类的JavaScript转换程序来转换代码,然后使用grunt-contrib-uglify
对结果ES5代码进行uglification。
或者,如果ES6模板文字是项目使用的ES6语法的唯一部分,则始终可以选择恢复为旧字符串而不是字符串。 E.g。
var html = '<div class=\'list-item\'' +
'<span>ABC</span>' +
'</div>';
上面显示的示例代码将由grunt-contrib-uglify
成功处理。