我对Gulp很新,但是通过关注this教程,我设置了一个Gulp任务,用于浏览特定目录中的javascript文件并将它们传输到另一个目录 - 非常简单。我看过其他一些教程,但这种方法似乎最简洁。这是我的代码:
var gulp = require('gulp');
var browserify = require('browserify');
var transform = require('vinyl-transform');
gulp.task('js', function() {
var browserified = transform(function(filename) {
return browserify(filename).bundle();
});
return gulp.src(['./public/js/src/**/*.js'])
.pipe(browserified)
.pipe(gulp.dest('./public/js/dist'));
});
上面的代码与我见过的这种类型的许多其他实现非常相似,但是当我尝试使用gulp js
运行它时,会产生以下错误:
[15:47:13] Using gulp file
~/development/launchpad/workshop/gulpfile.js
[15:47:13] Starting 'js'...
_stream_readable.js:540
var ret = dest.write(chunk);
^
TypeError: undefined is not a function
at Producer.ondata (_stream_readable.js:540:20)
at Producer.emit (events.js:107:17)
at Producer.Readable.read (_stream_readable.js:373:10)
at flow (_stream_readable.js:750:26)
at resume_ (_stream_readable.js:730:3)
at _stream_readable.js:717:7
at process._tickCallback (node.js:355:11)
有谁知道可能导致此错误的原因是什么? (作为旁注,我想查看堆栈跟踪中的文件以试图弄清楚这里发生了什么,但在Spotlight中搜索_stream_readable.js会产生大约20个该名称的文件,所有看似Node模块有没有办法确定堆栈跟踪中文件的完整路径?)
答案 0 :(得分:1)
var browserify = require('browserify');
var gulp = require('gulp');
var source = require('vinyl-source-stream');
gulp.task('browserify', function() {
return browserify('lib/front/app.js')
.bundle()
//Pass desired output filename to vinyl-source-stream
.pipe(source('bundle.js'))
// Start piping stream to tasks!
.pipe(gulp.dest('public/build/'));
});
答案 1 :(得分:1)
如果您希望browserify与gulp一起使用。 dest并创建一个文件,我们通过.pipe(gulp.dest('src / js'))指定该文件, 那么您需要下载Vinyl-source-stream并将其放入.pipe(source('bundle.js')), 但实际上是在browserify中,即bundle方法接受回调,并且不需要dest或source
browserify({
entries: jsFile,
basedir: "src/js/dev",
debug: true,
})
.transform(babelify, {
presets: ['@babel/preset-env'],
})
.bundle((err, buffer) => {
let event = new EventEmitter();
if (err) {
event.emit('error',err)
}
else {
let data = minify(buffer.toString(), {}).code;
fs.createWriteStream('./src/js/bundle.js').write(data)
console.dir(222);
bs.reload()
}
})
答案 2 :(得分:0)
不幸的是,这是browserify / gulp的问题,并且nothing that vinyl-transform可以做到。解决方案是使用vinyl-source-stream
和vinyl-buffer
:
var gulp = require('gulp');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var glob = require('node-glob');
gulp.task('browserify', function (cb) {
glob('./src/**/*.js, {}, function (err, files) {
var b = browserify();
files.forEach(function (file) {
b.add(file);
});
b.bundle().
.pipe(source('output.js'))
.pipe(gulp.dest('./dist'));
cb();
})
});
更多信息here。