2015-04-03 17 views
7

Khi sau example recipe từ kho Gulp.js. Tôi gặp lỗi:Object # <Readable> không có phương pháp 'ghi' khi sử dụng Gulp + Browserify

[12:27:31] Using gulpfile C:\GH\riot-tag-build\Gulpfile.js 
[12:27:31] Starting 'browserify'... 

_stream_readable.js:602 
    var written = dest.write(chunk); 
        ^
TypeError: Object #<Readable> has no method 'write' 
    at write (_stream_readable.js:602:24) 
    at flow (_stream_readable.js:611:7) 
    at _stream_readable.js:579:7 
    at process._tickCallback (node.js:442:13) 

Tôi đã cố gắng sửa đổi mã nguồn để phù hợp với yêu cầu của mình và đây là Gulpfile mà tôi đang cố chạy không may mắn.

var gulp = require('gulp'); 
var browserify = require('browserify'); 
var riotify = require('riotify'); 
var transform = require('vinyl-transform'); 
var buffer = require('gulp-buffer'); 

gulp.task('browserify', function() { 
    // set up the browserify instance on a task basis 
    var b = browserify({debug: true}); 
    // transform regular node stream to gulp (buffered vinyl) stream 
    var browserified = transform(function(filename) { 
    b.add(filename); 
    return b.bundle(); 
    }); 

    return gulp.src('./main.js') 
    .pipe(browserified) 
    .pipe(gulp.dest('./dist/')); 
}); 

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

Và toàn bộ ví dụ có thể được tìm thấy từ here

Bất cứ ý tưởng tại sao con suối có thể read-only? Bất kỳ trợ giúp nào được đánh giá cao.

+0

Kiểm tra công thức một lần nữa - nó được [cập nhật] (https://github.com/gulpjs/gulp/commit/75b5b74be0b0d37c10425363ac72e498c1bf012b) ngay sau khi bạn đăng câu hỏi này. @ [Câu trả lời] ddprrt của (http://stackoverflow.com/a/29430741/765987) có vẻ đúng dựa trên công thức cập nhật – JakeBoone

+0

Tôi không chắc là tôi hiểu các mục:' ./entry.js', .pipe (nguồn ('app.js')) một phần. Trong phiên bản cũ, một tệp nguồn đã được chỉ định một lần: './app.js' Nhưng trong phiên bản mới có entry.js này được giới thiệu. Tập tin đó là gì và tại sao nó liên quan? – Dtipson

Trả lời

9

Tôi gặp vấn đề tương tự. Và tôi tìm ra giải pháp. Bạn chỉ cần hạ cấp phiên bản "browserify" xuống phiên bản 9.0.4 mới nhất. Và mọi thứ sẽ ổn. Bạn có thể tham khảo lịch sử cam kết.

https://github.com/substack/node-browserify/commits/master

Cập nhật ==== ====

tôi giải quyết lỗi này. Tôi sử dụng 'through2', mã như sau.

gulp.src('./src/index.js') 
    .pipe(through2.obj(function (file, enc, next){ 
      browserify(file.path) 
       .bundle(function(err, res){ 
        // assumes file.contents is a Buffer 
        file.contents = res; 
        next(null, file); 
       }); 
     })) 
    .pipe(gulp.dest('./build/')) 

Giải pháp là do vấn đề này.

https://github.com/substack/node-browserify/issues/1044

+0

Cảm ơn bài đăng này. Các gợi ý để sử dụng trình duyệt 9.0.4 ist tốt. Nhưng nó phải được 9.0.4, 9.0.8 ví dụ cũng không làm việc .. bạn có thể đạt được điều này trong package.json của bạn với điều này: "browserify": "9.0.4" hoặc khi bạn cài đặt nó thông qua thiết bị đầu cuối của bạn: NPM cài đặt [email protected] – damir

4

Tôi không chắc chắn về vinyl-biến đổi, nhưng tôi đoán một cách chính xác của việc sử dụng browserify là sử dụng nó như là điểm khởi đầu, và biến đổi dòng sau đó để một đối tượng vinyl. Ít nhất đó là những gì trong công thức nấu ăn.

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

gulp.task('browserify', function() { 
    return browserify({ 
    debug: true, 
    entries: ['./main.js'] 
    }).bundle() 
    .pipe(source('main.bundle.js')) 
    .pipe(gulp.dest('./dist/')); 
}); 
+0

Ví dụ của bạn hoạt động trơn tru, cảm ơn! Tôi sẽ đợi các câu trả lời khác có thể giải thích vấn đề ban đầu, nhưng nếu không có gì xuất hiện thì tôi sẽ chấp nhận câu trả lời này. Tôi muốn tìm hiểu những gì họ đã làm trong công thức được liên kết. – Tx3

+0

Làm thế nào về việc xác định các biến đổi trong tức là đối tượng browserify: browserify ({transform: [riotify]}) .https: //github.com/gulpjs/gulp/blob/master/docs/recipes/browserify-transforms.md .. . Bên cạnh đó phải đối mặt với cùng một vấn đề bản thân mình .. – user3340677

+0

@ user3340677 tôi đã thử nó trong ví dụ này tôi dán: var b = browserify ({debug: đúng, transform: [ 'riotify']}); nhưng nó không giúp được gì. Biến đổi bên dưới nó là biến đổi vinyl, là con thú hoàn toàn khác. – Tx3

Các vấn đề liên quan