问题 Browserify basedir选项(类似RequireJS)


我无法弄清楚是怎么回事 browserify basedir 选项 作品..

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

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

我明白了 basedir 选项为您提供了指定所有需求路径的能力(自由!)(以a开头) .)来自静态的根/基础目录..而不是来自 process.cwd()..

这实际上让我发疯,我虽然这样的功能实现起来非常基础,很多人会遇到与我相同的问题,但网上关于如何正确设置的信息实际上很少 basedir 选择..相信我,这不是直截了当的..

所以这是让我疯狂的BASIC示例。

给定以下文件结构:

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"

我错过了什么 basedir 选项?


11345
2018-03-16 08:06


起源

从文档中,听起来像 basedir 仅影响您传递给的路径 browserify 启动捆绑过程(在您的情况下,路径为 app.js)。您使用的路径 require() 仍然是相对于它们出现的文件。 - Ben
是的,这是我最终理解的内容。该 paths 的选择 browser-resolve 是我在寻找的。 - eightyfive


答案:


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

opts.basedir 是browserify的目录 开始捆绑   从 对于以。开头的文件名 .

(资源)

意思是 basedir 仅适用于 entry 档。进一步 require 文件树结构中的深度调用将始终相对于当前正在解析的文件进行解析。

回答我的问题

paths 的选择 browser-resolve (由...使用 browserify 在引擎盖下)是我正在寻找的:

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

(资源)

只需将此选项与其他选项一起传递 browserify 选项 在实例化捆绑器时

注意:它看起来像是 搞乱事情 与...一起使用时 browserify-shim 转变


9
2018-03-24 05:31



您可能会对此主题感兴趣: stackoverflow.com/a/23608416/82609 - Sebastien Lorber