1

同様の問題に対するさまざまな回答がたくさんあるのを見て、たくさんの回答を試しました。gulp-streamify と vinyl-buffer を使ってみましたが、何も使わずに使ってみましたが、何をしても、gulp パイプラインに含めるたびに Uglify でエラーが発生します。

以下は、私のコードの最も関連性の高いスニペットです。

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 は、Vinyl ファイルではなく Buffer オブジェクトを Uglify に渡しているように見えます。この問題を診断するための情報や方法を歓迎します。

ノード v4.1.2 と gulp v3.9.0 を使用しています。私が知る限り、これらは最新バージョンです。何か変わったのかな?

私はこの質問を IRC にも投稿しました。迅速な解決を願っています。

4

2 に答える 2

2

わかりました、これと同じ問題を抱えている他の人のために。問題は、私がbrowserifyを使用していて、uglifyをトリガーする前に「ソース」をパイプしていなかったことでした..また、ソースがストリーミングビニールファイルオブジェクトを返すため、uglifyの前にバッファをパイプする必要がありました.

この SO は、パイプの順序に気付いたときにそれを理解するのに役立ちました: Gulp で Browserify を使用して出力を醜くする方法は?

私のコードに対する私の解決策は次のとおりです。

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/'));
}
于 2015-10-13T18:14:31.910 に答える