2013-01-22 46 views
2

由於跨RequireJS來的時候已經開始全心全意地接受它,因爲它似乎我已經創建了一個「一攬子組織的依賴等如何管理requireJS基於包的Node.js應用

對於我的當前項目的好方法'requireJS組織的模塊將爲許多node.js應用程序提供所需的數據庫API。

但是我遇到了一個絆腳石......我怎麼能讓第三方應用程序使用我的軟件包,而不需要使用requireJS?

我爲我的應用程序和API目錄結構是目前如下:

api_package/node_modules 
api_package/controllers/* 
api_package/views/* 
api_package/helpers/* 
api_package/models/* 
api_package/main.js 

application_1/node_modules 
application_1/app.js 

application_2/node_modules 
application_2/app.js 

我需要我的應用程序是自包含的 - 這樣他們就可以很容易地部署 - 因此我目前的解決辦法是複製api_package/*進入「node_modules」的application_1 & 2目錄,並設置其requirejs配置以下:

(function() { 
    var requirejs; 

    requirejs = require('requirejs').config({ 
    baseUrl: __dirname, 
    nodeRequire: require, 
    packages: [ 
     { 
     name: 'api_package', 
     location: './node_modules/api_package' 
     } 
    ] 
    }); 

這感覺有點髒,錯了!

有沒有更好的方法?我是否缺少requireJS的某些包裝功能?

它甚至有可能隱藏我api_package的實現細節(細節是,我使用requireJS),並允許應用程序使用,就像它們的任何其他模塊:

require('api_package') 

回答

0

可以使用amdefine包,它允許您編碼到AMD API並使模塊在節點程序中工作,而無需其他程序使用AMD。

除了關於amdefine github page的文檔,這也是documented on the RequireJS website

+0

這是否意味着每個單個代碼文件在api_package中,我需要預先'if(typeof define!=='function')var define = require('amdefine')(module); }'? – greTech

+0

@是的,每一個你想要通過AMD/CommonJS加載的代碼文件。不過,r.js優化器可以在部署版本中刪除它們。 – jevakallio

相關問題