2015-04-02 54 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

相关问题