我无法理解 browserify basedir
选项 的工作原理。
注意:由于我从 RequireJS(类似于 baseUrl
)来,因此我对整个 basedir
概念的理解可能是错误的。
编辑
事实上我确实错了,但你仍然可以通过使用 paths
选项来实现我尝试做的事情,详见下文。
我理解 basedir
选项给了你自由的能力去指定所有需要的路径(以 .
开头)从一个静态的根/基础目录开始。而不是从 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'));
});
我希望能够在
PersonView.js
中进行以下require()
调用: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"
关于 basedir
选项,我缺少什么信息?
basedir
只影响传递给browserify
以启动打包过程的路径(在您的情况下是app.js
的路径)。在require()
中使用的路径仍将相对于它们所在的文件。 - Benbrowser-resolve
的paths
选项正是我在寻找的。 - eightyfive