0

我正在使用 jQuery Noty 插件在 GUI 中生成通知,并且我想使用 mo 动画。甚至还有一个我想在他们的网站上使用的示例动画。

丑化我的代码库后,这是返回的错误:

SyntaxError: Unexpected token: name (x150) message: SyntaxError: Unexpected token: name (x150)', fileName: ...\notifications.js', lineNumber: 118, stack: 'Error\n at new JS_Parse_Error

有问题的行号如下:

var parent = new mojs.Shape({
        parent: n.barDom,
        width: 200,
        height: n.barDom.getBoundingClientRect().height,
        radius: 0,
        x: { [150]: -150 },
        duration: 1.2 * 500,
        isShowStart: true
});

更具体地说,这是导致错误的原因:

{ [150]:-150 }

显然这是无效的,所以我正在寻找这种表示法的替代方案。这可以通过某种方式实现吗?

仅供参考,这是我执行的 gulp 任务:

gulp.task('min:jsscripts', function () {
 return gulp.src(
    [
    'Scripts/**/*.js',
    '!Scripts/**/*.min.js',
    '!Scripts/**/*-debug.js',
    '!Scripts/**/*.map'
    ], { base: "./" })
    .pipe(tfs({ command: 'edit', params: { lock: 'none' } }))
    .pipe(uglify().on('error', function (e) {
        console.log(e);
    }))
    .pipe(rename({ suffix: '.min' }))
    .pipe(diff())
    .pipe(diff.reporter({ fail: false }))
    .pipe(gulp.dest('.'));
});

更新:

我尝试使用不同的缩小器(带有 babili 预设的 babel),这似乎有效。我读到 uglify 不支持 ECMAScript 6,所以这可能是 ECMAScript 6 语法吗?如果是这样,另一种语法是什么?

这是更新后的 gulp 任务:

gulp.task('min:jsscripts', function () {
 return gulp.src(
    [
    'Scripts/**/*.js',
    '!Scripts/**/*.min.js',
    '!Scripts/**/*-debug.js',
    '!Scripts/**/*.map'
    ], { base: "./" })
    .pipe(tfs({ command: 'edit', params: { lock: 'none' } }))
    .pipe(babel({ presets: ['babili'] }).on('error', function (e) {
        console.log(e);
    }))
    .pipe(rename({ suffix: '.min' }))
    .pipe(diff())
    .pipe(diff.reporter({ fail: false }))
    .pipe(gulp.dest('.'));
});

如果我对 ECMASCript 6 语法的假设是正确的(你会注意到我在这方面相当缺乏经验),我需要做什么才能将其转换为 ECMASCript5?我的 gulp 任务已经这样做了吗?

4

1 回答 1

0

我的怀疑是对的……我必须转换上面的代码以使其符合 ES5。这是这样做的结果:

var parent = new mojs.Shape({
                    parent: n.barDom,
                    width: 200,
                    height: n.barDom.getBoundingClientRect().height,
                    radius: 0,
                    x: _defineProperty({}, 150, -150),
                    duration: 1.2 * 500,
                    isShowStart: true
                });

function _defineProperty(obj, key, value) {
        if (key in obj) {
            Object.defineProperty(obj, key, {
                value: value, enumerable: true, configurable: true, writable: true
            });
        } else { obj[key] = value; } return obj;
}
于 2017-04-17T14:58:15.250 回答