【问题标题】:Reactify, Browserify and Gulp: TypeError: Object #<Transform> has no method 'transform'Reactify、Browserify 和 Gulp:TypeError: Object #<Transform> has no method 'transform'
【发布时间】:2014-10-17 15:33:44
【问题描述】:

这是我通过命令行执行gulp scripts 时的错误:

TypeError: Object # has no method 'transform'

这是gulpfile.js

var gulp            = require ('gulp')
    , browserify    = require ('gulp-browserify')
    , source        = require ('vinyl-source-stream')
    , reactify      = require ('reactify');

gulp.task('scripts', function () {
  browserify('./assets/js/main.js')
    .transform(reactify)
    .bundle()
    .pipe(source('main.js'))
    .pipe(gulp.dest('./static/js'));
});

gulp.task('default', ['scripts']);

我真的不知道如何解决这个问题。我在互联网上进行了搜索,但没有找到与我的具体错误相近的内容。

【问题讨论】:

    标签: javascript gulp reactjs browserify


    【解决方案1】:

    你的任务有一些问题。

    首先,您必须使用gulp.src 来获取您的main.js 文件。其次,transformgulp-browserify 的一个选项,而不是您想要通过管道传输流的东西,bundle 也是如此。

    gulp.task('scripts', function () {
      return gulp.src('./assets/js/main.js')
        .pipe(browserify({
          transform: [reactify]
        }))
        .pipe(gulp.dest('./static/js'));
    });
    

    如果你想要的东西更像你的第一次尝试,你不需要 gulp-browserify,但是单独 browserify,有一篇相当不错的文章关于如何使用 ReactJsBrowserifygulp here.

    【讨论】:

    • 如果我要使用 browserify-shim?
    • 这也是一个转换,并且 gulp-browserify 允许在数组上,所以我认为你没问题link
    • gulp-browserify 允许,browserify 不允许。我看不出我怎样才能让他们一起工作。你能给我举个例子吗?你的代码片段返回给我TypeError: Object #&lt;Browserify&gt; has no method 'pipe'
    • 带有var browserify = require('gulp-browserify'); ?真奇怪。我刚刚看到 gulp-browserifyblacklisted 所以你真的应该使用 browserifythis link 有很多关于使用 shim 的示例
    【解决方案2】:

    您将vinyl-source-streambrowserify 一起使用,而不是与gulp-browserify 一起使用。你把两者混在一起了。

    var buffer = require('vinyl-buffer');
        ,source = require('vinyl-source-stream')
        ,browserify = require('browserify') //not gulp-browerify
        ,babelify = require('babelify')
        ,uglify = require('gulp-uglify')
        ;
    
    gulp.task('scripts', function(){
      var bundler = browserify('./assets/js/main.js');
    
      return bundler
        .transform(babelify, {presets: ["es2015", "stage-1", "react"]})
        .bundle({standalone: 'noscope'})
        .pipe(source('main.js'))
        .pipe(buffer())
        .pipe(uglify())
        .pipe(gulp.dest('./static/js'));
    });
    

    来自https://github.com/gulpjs/gulp/issues/369


    编辑:使用 babelify 而不是 reactify(已弃用)

    【讨论】:

    • 抱歉给您造成混淆...vinyl-source-streambrowserify 一起使用...如果您使用的是gulp-browserify,它的工作方式会有所不同。最好只使用browserify,并使用vinyl-source-stream将流转换为gulp流。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多