Browserify basedir选项(类似RequireJS)

时间:2014-03-16 08:06:30

标签: browserify gulp

我无法弄清楚browserify basedir option是如何运作的。

注意:我对整个basedir概念的理解可能有误,因为我来自RequireJS(想想baseUrl)。

修改 确实我错了,但你仍然可以通过paths选项实现我想做的事情,请参阅下面的答案。

我理解basedir选项为您提供了从静态根/基础目录指定所有需求路径(以.开头)的能力(自由!)。而不是来自{ {1}} ..

这实际上让我发疯,我虽然这样的功能实现起来非常基础,但很多人会遇到和我一样的问题,但网上实际上很少有关于如何使用的信息正确设置process.cwd()选项..相信我,这不是直截了当的..

所以这是基本的例子让我疯狂。

给定以下文件结构:

basedir

跑步:

js/
js/app.js
js/src/models/Person.js
js/src/views/PersonView.js

我希望能够在var browserify = require('browserify'); var gulp = require('gulp'); gulp.task('scripts', function() { var b = browserify('./app', {basedir: './js'}); b.bundle().pipe(gulp.dest('./dist')); }); 中进行以下require()来电:

PersonView.js

而不是(显然正在......):

var Person = require('./src/models/Person');
...

但是我收到以下错误:

var Person = require('../models/Person');
...

我对Error: module "./src/models/Person" not found from "/Users/...some path.../js/src/views/PersonView.js" 选项缺少什么?

1 个答案:

答案 0 :(得分:9)

事实证明,basedir与RequireJS的baseUrl不同。正如@Ben在上述评论中所述,官方文档说:

  

opts.basedir是浏览器开始捆绑的目录   来自的文件名以.开头。

(source)

意味着basedir仅适用于entry files。文件树结构深处的require次调用将始终相对于当前正在解析的文件进行解析。

回答我的问题

paths的{​​{1}}选项(由browser-resolve在引擎盖下使用)正是我所寻找的:

  

paths - 如果在法线上找不到任何内容,则使用require.paths数组   node_modules递归遍历

(source)

只需将此选项与其他browserify选项when instantiating the bundler一起传递。

注意:与messing up things一起使用时看起来是browserify-shim transform