2014-11-25 37 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並開始使用它而不是標準的符號鏈接,一切都開始工作。