我无法弄清楚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"
选项缺少什么?
答案 0 :(得分:9)
事实证明,basedir
与RequireJS的baseUrl
不同。正如@Ben在上述评论中所述,官方文档说:
opts.basedir
是浏览器开始捆绑的目录 来自的文件名以.
开头。
意味着basedir
仅适用于entry
files。文件树结构深处的require
次调用将始终相对于当前正在解析的文件进行解析。
paths
的{{1}}选项(由browser-resolve
在引擎盖下使用)正是我所寻找的:
paths - 如果在法线上找不到任何内容,则使用require.paths数组 node_modules递归遍历
只需将此选项与其他browserify
选项when instantiating the bundler一起传递。
注意:与messing up things一起使用时看起来是browserify-shim
transform。