浏览本身被浏览化的库:相对路径错误

Browserifying libraries that were themselves browserified: relative paths error

我想使用使用 browserify 构建的库。该库正确构建并且在单独使用时工作正常。

现在 built 库在我的 vendors/ 目录中,我尝试在我的新应用程序中要求它:

var myLib = require('./vendors/myLib');

当我尝试浏览我的应用程序时,它抱怨它无法在该库中找到一些内部 require 语句:

Error: Cannot find module '../utils/logger' from '/myApp/vendor'

Browserify 似乎试图从错误的目录重新构建库。我该如何解决这个问题?


更多细节:

库看起来像这样:

myLib
 │  app.js
 │
 ├──models
 │    model.js
 │
 ├──utils
      logger.js

app requires 模型,以及使用 require('../utils/logger').

模型 requires 记录器

然后将其构建到 myLib.js (browserify app.js --standalone myLib > myLib.js) 中。

到目前为止,还不错,myLib 工作正常。

在我的新应用程序中,我将 myLib.js 放在 /vendor 目录中,require 它如顶部所列,并得到 Browserify 无法找到 '../utils/logger'.

在这种情况下,我 控制 myLib,因此如果绝对必要可以更改它,但这是公司的另一个项目,如果必要我不想这样做。但是,我在 SO 上看到 at least one other question 显然有人对 bower 安装的第三方库有同样的问题。

这似乎是pretty borked

这里有几个选项:

  • 运行 derequiremyLib 食用前。

  • 尝试像这样浏览您的应用程序:

    browserify({
      entries: ['./entry'],
      noParse: ['/abs/path/to/vendors/myLib.js'],
    })
    

    如果它不起作用,请尝试在 noParse 值中不带扩展名。

  • 在使用前缩小 myLib

aaaah,我终于让它工作了。使用 browserify 的独立选项和 gulp-derequire 就可以了!耶!