使用Browserify API,在本地文件上使用require和exclude

时间:2016-08-19 17:46:27

标签: javascript node.js gulp browserify

使用Browserify API和Gulp,我有:

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

var dependencies = [
  'lodash',
  './test.js',
];

gulp.task('lib', function() {
  return browserify()
    .require(dependencies)
    .bundle()
    .pipe(source('lib.js'))
    .pipe(gulp.dest('./'));
});

gulp.task('app', function() {
  return browserify('./app.js')
    .external(dependencies)
    .bundle()
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./'));
});

app.js我有这个:

var _ = require('lodash');
var test = require('./test.js');

Lodash系列正常,但./test.js不起作用。我收到错误Error: Cannot find module '/test.js'

如何让它发挥作用?

出于某种原因,密钥在bundle.jslib.js之间有所不同。在lib.js中,test.js的密钥是完整路径(/Users/gary/Projects/browserify-test/test.js),而在bundle.js中,它正在寻找具有密钥./test.js的模块。如果我手动将后者改为与前者相同,那么它就可以了。

我猜最终,Browserify不支持require对从同一个包中排除的本地文件。

1 个答案:

答案 0 :(得分:1)

browserify需要一个绝对路径来检索文件,并将其作为捆绑密钥保留。修复它的方法是使用expose选项......

在你的构建中......

var dependencies = [
  'lodash',
  {file: './test.js', expose: 'test'},
];

并在app.js ...

var _ = require('lodash');
var test = require('test');