2014-11-25 39 views
0

我正在开发一个browserify变换,我希望能够扩展。如何为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'),它的加载没有问题。似乎为我的转换运行的解析代码太严格了。我错过了什么?

回答

0

原来我的问题与符号链接有关。由于我还在开发我的变换和扩展,我已经创建了从我的应用程序到这些模块的符号链接。我想require是跟随符号链接并跳出我的应用程序node_modules目录,所以它无法解析我的扩展。一旦我了解到npm link并开始使用它而不是标准的符号链接,一切都开始工作。