2016-08-19 23 views
0

隨着Browserify API和咕嘟咕嘟的,我有這樣的:隨着Browserify API,使用要求,並排除對本地文件

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對從同一捆綁包中排除的本地文件。

+0

我假設你已經出口你的代碼在test.js中? – Federico

+0

是的,我已經出口了。這是一個合適的模塊。如果這兩個軟件包位於單個文件中,它將起作用。 – Gary

+0

嘗試路徑選項:return browserify({paths:['./node_modules','./src/js/']}),然後require('test.js');應該可以工作 – Federico

回答

0

browserify需要一個絕對路徑來檢索文件,並將其作爲捆綁鍵。該辦法解決它是使用expose選項...

在構建..

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

和app.js ...

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