如何为browserify转换动态加载节点模块

时间:2014-11-25 04:41:41

标签: javascript node.js browserify

我正在开发一个浏览器变换,我希望能够进行扩展。

//excerpt from package.json of my application that is using my transform and extension
"browserify": {
  "transform": [
    ["mytransform", {"extensions": ["my-extension"] } ]
  ]
}

在上面的示例中,我希望用户能够指定在我的转换中解释为扩展名的其他节点模块。

在我的转换代码中,我有以下内容来加载扩展:

//lines 347-349 of mytransform/index.js
var extensions = options.extensions.map(function(extensionId){
                                            return require(extensionId)();
                                          });

当我运行我的代码时,我看到以下

module.js:340
    throw err;
    ^
Error: Cannot find module 'my-extension'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at /Users/pdgreen/Documents/Personal/github/mytransform/index.js:348:52
    at Array.map (native)
    at module.exports (/Users/pdgreen/Documents/Personal/github/mytransform/index.js:347:39)
    at nr (/Users/pdgreen/Documents/Personal/github/myproject/node_modules/browserify/node_modules/module-deps/index.js:231:23)
    at /Users/pdgreen/Documents/Personal/github/myproject/node_modules/browserify/node_modules/resolve/lib/async.js:48:21
    at /Users/pdgreen/Documents/Personal/github/myproject/node_modules/browserify/node_modules/resolve/lib/async.js:127:35

我的扩展程序可供节点使用,因为如果我在我的应用程序中require('my-extension'),它会加载而不会出现问题。似乎为我的转换运行的解析代码限制太多。我错过了什么?

1 个答案:

答案 0 :(得分:0)

事实证明我的问题与符号链接有关。由于我还在开发变换和扩展,因此我创建了从应用程序到这些模块的符号链接。我猜需要遵循符号链接并跳出我的应用程序node_modules目录,因此它无法解析我的扩展。一旦我了解了npm link并开始使用它而不是标准的符号链接,一切都开始有效了。