2

React w/Flux を学習する比較的単純なプロジェクトを構築しています。Gulp を使用して (または使用しようとして)、Browserify、Reactify、Streamify、および Uglify を使用して自動ビルドを作成しています。これらはすべて npm 経由でインストールされます。フロー全体が機能していました。ファイルをいくつか変更して再構築しましたが、ビルドを実行するとエラーが発生しました。変更を元に戻し、元の以前の動作状態に戻った後でも。おそらくどこかで許可の変更が発生したのではないかと思いますが、自分でそれを行っていないため、それをさらに診断する方法がわかりません(問題があるかどうかはわかりません)。

.pipe(buffer())最初はビニー​​ル ストリーミング エラーが問題ではないかと疑っていましたが、ビルド フローにandを追加しましたがvinyl-buffer、エラーは変わりませんでした。

これが一口です:

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var htmlreplace = require('gulp-html-replace');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var browserify = require('browserify');
var watchify = require('watchify');
var reactify = require('reactify');
var streamify = require('gulp-streamify');
var gutil = require('gulp-util');

var path = {
    HTML: 'app/index.html',
    MINIFIED_OUT: 'build.min.js',
    OUT: 'build.js',
    DEST: 'dist',
    DEST_BUILD: 'dist/build',
    DEST_SRC: 'dist/src',
    ENTRY_POINT: './app/App.js'
};

gulp.task('build', function(){
    browserify({
        entries: [path.ENTRY_POINT],
        transform: [reactify]
    })
        .bundle()
        .pipe(uglify().on('error', gutil.log))
        .pipe(source(path.MINIFIED_OUT))
        .pipe(buffer())
        .pipe(streamify(uglify(path.MINIFIED_OUT)))
        .pipe(gulp.dest(path.DEST_BUILD));
});

gulp.task('replaceHTML', function(){
    gulp.src(path.HTML)
        .pipe(htmlreplace({
            'js': 'build/' + path.MINIFIED_OUT
        }))
        .pipe(gulp.dest(path.DEST));
});

gulp.task('production', ['replaceHTML', 'build']);

エラーは次のとおりです。

[09:54:33] Using gulpfile /Library/WebServer/Documents/lldb/gulpfile.js
[09:54:33] Starting 'replaceHTML'...
[09:54:33] Finished 'replaceHTML' after 8.3 ms
[09:54:33] Starting 'build'...
[09:54:33] Finished 'build' after 27 ms
[09:54:33] Starting 'production'...
[09:54:33] Finished 'production' after 7.07 μs
/Library/WebServer/Documents/lldb/node_modules/gulp-uglify/minifier.js:67
    if (file.isNull()) {
             ^

TypeError: file.isNull is not a function
    at DestroyableTransform.minify [as _transform] (/Library/WebServer    /Documents/lldb/node_modules/gulp-uglify/minifier.js:67:14)
    at DestroyableTransform.Transform._read (/Library/WebServer/Documents/lldb/node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:172:10)
    at DestroyableTransform.Transform._write (/Library/WebServer/Documents/lldb/node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:160:12)
    at doWrite (/Library/WebServer/Documents/lldb/node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:326:12)
    at writeOrBuffer (/Library/WebServer/Documents/lldb/node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:312:5)
    at DestroyableTransform.Writable.write (/Library/WebServer/Documents/lldb/node_modules/gulp-uglify/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:239:11)
    at Readable.ondata (/Library/WebServer/Documents/lldb/node_modules/browserify/node_modules/read-only-stream/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 (/Library/WebServer/Documents/lldb/node_modules/browserify/node_modules/read-only-stream/node_modules/readable-stream/lib/_stream_readable.js:195:16)

どんなアイデアでも歓迎します - ありがとう。

4

2 に答える 2

0

わかりました、これは奇妙でした-誰でもコメントおよび/または更新できるように投稿します。

エラーパスをたどって、minifier.js下のファイルを開きましたgulp-uglify。67 行目 (上記の参照エラー) は次のことを示しています。

if (file.isNull()) {
      return callback(null, file);
    }

    if (file.isStream()) {
      return callback(createError(file, 'Streaming not supported'));
    }

問題は isNull と isStream が関数ではなく、参照であることです。したがって、コードを次のように変更する必要があります。

if (file.isNull) {
      return callback(null, file);
    }

    if (file.isStream) {
      return callback(createError(file, 'Streaming not supported'));
    }

余分な括弧 - が削除されていることに注意してください()。これは、js が呼び出そうとしている関数ではなく、本来あるべき参照にこれらを返します。私のコードが実行されていたときと実行が停止したときとの間にエクストラ()が isNull と isStream にどのように書き込まれたかは、誰の推測でもあります (そして少し心配です) - 私はそれらの変更を行いませんでした。

興味のある方のために、完全なパスの説明を以下に示します。


isNull と isStream の参照は、次の index.js で行われます。

module.exports = {
  ...
  isStream: require('./lib/isStream'),
  isBuffer: require('./lib/isBuffer'),
  isNull: require('./lib/isNull'),
  ...
};

の下のこの関数を参照すると、次のgulp-uglify -> node_modules -> gulp-util -> lib -> isNull.js (& isStream.js)ようになります。

module.exports = function(v) {
  return v === null;
};

()そのため、 minifier.jsの関数呼び出しブラケットを削除すると、正しい参照が作成され、gulp ビルドがエラーなしで実行されます。

結局のところ、問題のように見えgulp-uglifyます(私は推測しています)。

于 2015-10-18T18:51:26.017 に答える