Gulp RequireJS:丑化不起作用

Gulp RequireJS:丑化不起作用,gulp,requirejs,requirejs-optimizer,Gulp,Requirejs,Requirejs Optimizer,我一定是在什么地方出错了,但在优化过程中它并没有被写入标准输出。我试图通过requirejs优化一个文件,但是输出没有被缩小。根据这篇文章,UglifyJS应该缩小代码 无论如何,下面的代码是微不足道的,但它隔离了问题 src/index.js: require(['config'], function () { require(['myMod'], function (myMod) { console.log(myMod.x()); }) }) src/myM

我一定是在什么地方出错了,但在优化过程中它并没有被写入标准输出。我试图通过requirejs优化一个文件,但是输出没有被缩小。根据这篇文章,UglifyJS应该缩小代码

无论如何,下面的代码是微不足道的,但它隔离了问题

src/index.js:

require(['config'], function () {
    require(['myMod'], function (myMod) {
        console.log(myMod.x());
    })
})
src/myMod.js:

define(function () {
    let myMod = {
        x: 5
    };

    return myMod;
})
src/config.js:

define(function () {
    require.config({
        baseUrl: 'src'
    });
})
下面是正在执行优化的吞咽任务:

gulp.task('optimize', function (cb) {
    let config = {
        appDir: 'src',
        dir: 'dist/src',
        generateSourceMaps: true,
        preserveLicenseComments: false,
        removeCombined: true,
        baseUrl: './',
        modules: [{
            name: 'index',
            include: ['myMod']
        }]
    }

    let success = function (buildResponse) { console.log(buildResponse); cb() },
        error = function (err) { console.log(err); cb(err) }

    rjs.optimize(config, success, error)
})
运行任务后,dist/src/index.js中包含了所有其他模块。但是,它没有缩小,并且没有重命名任何变量。相反,这就好像这些文件只是连接在一起,没有别的了。有人能告诉我(1)为什么它没有缩小?(2) UglifyJS是否抛出错误?如果是这样的话,有没有一种方法可以在运行gulp任务时看到它

编辑这里有一个到RequireJS文档的链接,其中谈到了在节点中使用优化器,这是在上面提到的gulp任务中完成的。它位于“将优化器用作节点模块”的底部


RequireJS的优化器bundle UglifyJS2。UglifyJS2不处理ES6或更高版本。如果我将您在gulpfile中使用的选项放入一个单独的文件,我将其命名为
options.js
,并发出以下命令:

$ ./node_modules/.bin/r.js -o options.js
然后我得到这个输出:

Tracing dependencies for: index
Uglify file: /tmp/t33/dist/src/index.js
Error: Cannot uglify file: /tmp/t33/dist/src/index.js. Skipping it. Error is:
SyntaxError: Unexpected token: name (myMod)

If the source uses ES2015 or later syntax, please pass "optimize: 'none'" to r.js and use an ES2015+ compatible minifier after running r.js. The included UglifyJS only understands ES5 or earlier syntax.

index.js
----------------
config.js
index.js
myMod.js
如您所见,UglifyJS确实无法缩小您的文件,而RequireJS只是跳过了该文件的缩小步骤。因为这不是一个完全错误,所以文件仍然是输出的,只是没有缩小

如果将
myMod.js
中的
let
更改为
var
,则问题消失


不幸的是,由于这不是执行失败(
r.js
仍在运行,它只是没有缩小文件),因此错误不会通知传递给
rjs.optimize
的errback处理程序。我看不出有什么办法能在一个沙坑里发现这样的错误。安全的做法是设置
optimize:“none”
,并在运行
rjs.optimize
之后作为一个额外的构建步骤执行缩小。我也遇到了同样的问题,
require.js
的优化器(
r.js
)正在合并不同的模块,但它没有缩小合并的文件。虽然我的运行时环境与您的不同(使用Java的Nashorn引擎),但在我的控制台上可以看到此错误:

If the source uses ES2015 or later syntax, please pass "optimize: 'none'" to r.js and use an ES2015+ compatible minifier after running r.js. The included UglifyJS only understands ES5 or earlier syntax. 

此外,此错误不会阻止优化器组合文件,只是优化器无法缩小合并的文件。

非常感谢!我不好意思说这不是我第一次犯这样的错误:(希望这是最后一次!没错,requirejs说我们应该在rjs任务后缩小自己。请让我知道如何解决这个问题