2015-04-02 46 views
0

我有以下道場建造輪廓:如何在dojo應用程序構建配置文件中加載json文件?

var profile = (function() { 
    return { 
     basePath: "./Scripts", 
     releaseDir: "./bin", 
     releaseName: "", 
     action: "release", 
     mini: true, 
     layerOptimize: "closure", 
     optimize: "closure", 
     cssOptimize: "comments", 
     localeList: false, 
     packages: [ 
      { 
       name: "dojo", 
       location: "l:/dojo-debug/1.10.4/dojo" 
      }, 
      { 
       name: "dijit", 
       location: "l:/dojo-debug/1.10.4/dijit" 
      }, 
      { 
       name: "dojox", 
       location: "l:/dojo-debug/1.10.4/dojox" 
      }, 
      ... 
     ], 
     layers: ... 
    }; 
})(); 

現在,我需要從一些JSON文件中讀取值,所以我期待這樣的事情:

var profile = (function() { 
    var versions = SomeHowReadTheContentsOf("ThirdPartyJsLibRootMap.json"); 
    return { 
     basePath: "./Scripts", 
     releaseDir: "./bin", 
     releaseName: "", 
     action: "release", 
     mini: true, 
     layerOptimize: "closure", 
     optimize: "closure", 
     cssOptimize: "comments", 
     localeList: false, 
     packages: [ 
      { 
       name: "dojo", 
       location: "l:/dojo-debug/" + versions["dojo-debug"] + "/dojo" 
      }, 
      { 
       name: "dijit", 
       location: "l:/dojo-debug/" + versions["dojo-debug"] + "/dijit" 
      }, 
      { 
       name: "dojox", 
       location: "l:/dojo-debug/" + versions["dojo-debug"] + "/dojox" 
      } 
      ... 
     ], 
     layers: ... 
    }; 
})(); 

對於我的生活我沒有找到辦法做到這一點。

任何想法?

編輯

我的命令行是:node L:\dojo-debug\1.10.4\dojo\dojo.js load=build --profile .\package.profile.js

EDIT2

我加入的require所有屬性的控制檯日誌,下面是結果:

has = undefined 
isXdUrl = undefined 
initSyncLoader = undefined 
eval = undefined 
signal = undefined 
on = undefined 
map = undefined 
rawConfig = undefined 
legacyMode = undefined 
async = undefined 
waitms = undefined 
baseUrl = undefined 
idle = undefined 
toAbsMid = undefined 
toUrl = undefined 
log = undefined 
trace = undefined 
injectUrl = undefined 
getText = undefined 
nodeRequire = undefined 
uid = undefined 
cache = undefined 
packs = undefined 
paths = undefined 
aliases = undefined 
modules = undefined 
execQ = undefined 
defQ = undefined 
waiting = undefined 
mapProgs = undefined 
pathsMapProg = undefined 
listenerQueues = undefined 
computeMapProg = undefined 
computeAliases = undefined 
runMapProg = undefined 
compactPath = undefined 
getModuleInfo = undefined 
boot = undefined 
scopeify = undefined 

所以nodeRequire在那裏,但它的值是undefined。有些事情是錯的。

回答

1

如果您使用NodeJS運行Dojo構建器,則可以通過require.nodeRequire訪問其require。在構建配置文件中,還可以訪問名爲selfPath的變量,該變量是已傳遞給構建器的配置文件的絕對目錄名稱(它類似於節點模塊中的__dirname)。把這兩樣東西放在一起,並假設ThirdPartyJsLibRootMap.json是你的構建配置文件的兄弟:

var profile = (function() { 
    var req = require.nodeRequire; 
    var path = req('path'); 
    var versions = req(path.join(selfPath, 'ThirdPartyJsLibRootMap.json')); 
    return { 
     ... 
    }; 
})(); 
+0

'require.nodeRequire'未定義。我已經在我的帖子中添加了一個編輯,指定了我正在使用的命令行。 – mark 2015-04-02 19:59:12

+0

我想我需要指定「主機節點」,在計算過程中如何... – mark 2015-04-02 20:06:48

+0

我剛剛嘗試過使用https://gist.github.com/bryanforbes/cea64894c0e5d77fccea中找到的蒼蠅以及配置文件成功運行時,'nodeRequire'是一個函數,並正確解析JSON文件。我使用的是OS X,但我認爲Windows的功能類似。 – 2015-04-02 20:44:08

相關問題