使用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.js
和lib.js
之间有所不同。在lib.js
中,test.js
的密钥是完整路径(/Users/gary/Projects/browserify-test/test.js
),而在bundle.js
中,它正在寻找具有密钥./test.js
的模块。如果我手动将后者改为与前者相同,那么它就可以了。
我猜最终,Browserify不支持require
对从同一个包中排除的本地文件。
答案 0 :(得分:1)
browserify需要一个绝对路径来检索文件,并将其作为捆绑密钥保留。修复它的方法是使用expose
选项......
在你的构建中......
var dependencies = [
'lodash',
{file: './test.js', expose: 'test'},
];
并在app.js ...
var _ = require('lodash');
var test = require('test');