【问题标题】:gulp-uglify appears to be expecting Vinyl, but instead gets Buffergulp-uglify 似乎在期待 Vinyl,但得到的是 Buffer
【发布时间】:2015-10-13 04:13:44
【问题描述】:

我已经看到了很多针对类似问题的不同答案,并且我已经尝试了很多。我尝试过使用 gulp-streamify 和vinyl-buffer,我尝试过不使用任何东西,但无论我做什么,只要我将它包含在我的 gulp 管道中,我都会收到 Uglify 错误。

以下是我的代码中最相关的sn-p。

var bfyBundler = browserify({
    entries:['./src/sequencer.js'],
    extensions:['.jsx'],
    debug: devMode,
    cache: {}, packageCache: {}, fullPaths: true
});
function bundleSequencer(){
    var pipeline = bfyBundler.bundle()
        .on('error', function(error){
            notifier.notify({
                title:error.description,
                message:error.message,
                sound:true,
                wait:true,
                fileAndLocation:error.filename + ':' + error.lineNumber + ':' + error.column
            });
        });
    if(!devMode){
        pipeline = pipeline
            .pipe(uglify());
    }
    pipeline = pipeline
        .pipe(source('sequencer.js'))
        .pipe(gulp.dest('./app/'));
}

但是运行此管道会返回以下错误:

E:\Sequencer\node_modules\gulp-uglify\minifier.js:67  
    if (file.isNull()) {  
             ^

TypeError: file.isNull is not a function  
    at DestroyableTransform.minify [as _transform] (E:\Sequencer\node_modules\gulp-uglify\minifier.js:67:14)  
    at DestroyableTransform.Transform._read (E:\Sequencer\node_modules\through2\node_modules\readable-stream\lib\_stream_transform.js:172:10)  
    at DestroyableTransform.Transform._write (E:\Sequencer\node_modules\through2\node_modules\readable-stream\lib\_stream_transform.js:160:12)  
    at doWrite (E:\Sequencer\node_modules\through2\node_modules\readable-stream\lib\_stream_writable.js:326:12)  
    at writeOrBuffer (E:\Sequencer\node_modules\through2\node_modules\readable-stream\lib\_stream_writable.js:312:5)  
    at DestroyableTransform.Writable.write (E:\Sequencer\node_modules\through2\node_modules\readable-stream\lib\_stream_writable.js:239:11)  
    at Readable.ondata (E:\Sequencer\node_modules\readable-stream\lib\_stream_readable.js:572:20)  
    at emitOne (events.js:77:13)  
    at Readable.emit (events.js:169:7)  
    at readableAddChunk (E:\Sequencer\node_modules\readable-stream\lib\_stream_readable.js:195:16)

使用 node-debug 触发 gulp 似乎 gulp 正在传递一个 Buffer 对象,而不是一个 Vinyl 文件到 Uglify。我欢迎任何可以尝试诊断此问题的输入或方法。

我正在使用节点 v4.1.2 和 gulp v3.9.0。据我所知,这些是最新版本。我想知道有什么变化吗?

我也将此问题发布到 IRC,并希望快速解决。

【问题讨论】:

    标签: gulp gulp-uglify


    【解决方案1】:

    好的,对于遇到同样问题的其他人。问题是我正在使用 browserify,并且在触发 uglify 之前我没有通过“源”管道。我还需要在 uglify 之前通过缓冲区管道,因为源返回一个流式乙烯基文件对象。

    当我注意到管道的顺序时,这个 SO 帮助我弄清楚了:How to uglify output with Browserify in Gulp?

    我的代码解决方案是:

    var bfyBundler = browserify({
        entries:['./src/sequencer.js'],
        extensions:['.jsx'],
        debug: devMode,
        cache: {}, packageCache: {}, fullPaths: true
    });
    function bundleSequencer(){
        var pipeline = bfyBundler.bundle()
            .on('error', function(error){
                notifier.notify({
                    title:error.description,
                    message:error.message,
                    sound:true,
                    wait:true,
                    fileAndLocation:error.filename + ':' + error.lineNumber + ':' + error.column
                });
            })
            .pipe(source('sequencer.js'));
        if(!devMode){
            pipeline = pipeline
                .pipe(buffer())
                .pipe(uglify());
        }
        pipeline = pipeline
            .pipe(gulp.dest('./app/'));
    }
    

    【讨论】:

      【解决方案2】:

      我看到您发布了自己的答案,但我想添加一些其他信息。 Gulp 插件需要大量 Vinyl 文件对象。 Browserify.bundle() 返回一个流(字符流),因为它不是 Gulp 插件。如果您使用gulp-bro,您的原始代码将可以工作,它一个调用 Browserify 的 gulp 插件。

      请参阅my answer on a related topic 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2015-04-25
        • 2019-06-02
        • 1970-01-01
        • 2022-08-21
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多