如何在Gulp中使用Browserify lib为模块添加别名?

Rav*_*ine 9 javascript commonjs node.js browserify gulp

Browserify自述文件描述了创建外部需求,如下所示: $ browserify -r through -r duplexer -r ./my-file.js:my-module > bundle.js

然后在您的页面中,您可以:

<script src="bundle.js"></script>
<script>
  var through = require('through');
  var duplexer = require('duplexer');
  var myModule = require('my-module');
  /* ... */
</script>
Run Code Online (Sandbox Code Playgroud)

如果你想使用命令行,这是有效的,但我想在gulpfile中使用Browserify.但似乎无法像./myfile-js:my-module示例中那样为模块添加名称.如果它有一个选项,我还没有找到它.以他们描述的方式要求我的模块的唯一方法是做,require(3)因为Browserify似乎给模块提供了数字,但这些数字改变了,显然这是不可取的.

编辑:我目前的解决方案是这样做:

var shell = require('gulp-shell');

gulp.task('browserify', shell.task([
  'browserify -r ./src/bundle.js:bundle > ./build/bundle.js'
]))
Run Code Online (Sandbox Code Playgroud)

如果我想充分利用Gulp管道,这是一种解决方法,并不是最佳选择.我想知道如何在没有命令行的情况下完成这项工作,或者如果没有,为什么这只能通过CLI完成?

JMM*_*JMM 8

b.require()expose选项.

function bundle () {
  browserify()
  .require("./myfile-js", {expose: "my-module"})
  .require("through")
  .require("duplexer")
  .bundle()
  /* ... */
}

gulp.task("browserify", bundle);
Run Code Online (Sandbox Code Playgroud)

Browserify-Gulp集成

其他答案表明这vinyl-source-stream是一个要求,但这不一定是真的.您还没有说明如何整合Browserify和Gulp.你只需要vinyl-source-stream实际在Browserify和Gulp之间进行一些集成,而不仅仅是在一个Gulp任务中包含一个Browserify捆绑操作(人们通常会这样做),就像在捆绑输出上运行Gulp插件一样.例如,您可以这样做:

var fs = require("fs");

gulp.task("browserify", function () {
  return browserify(/* ... */)
    /* ... */
    .bundle()
    // But if you're doing something with Gulp here you should use
    // `vinyl-source-stream` and pipe to `gulp.dest()`.
    .pipe(fs.createWriteStream("./bundle.js", "utf8"));
});
Run Code Online (Sandbox Code Playgroud)