javascript - 如何在 dojo 应用程序构建配置文件中加载 json 文件?

标签 javascript dojo

我有以下 dojo 构建配置文件:

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

编辑2

我添加了 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。出了点问题。

最佳答案

如果您使用 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 {
        ...
    };
})();

关于javascript - 如何在 dojo 应用程序构建配置文件中加载 json 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420631/

相关文章:

javascript - 使用 AngularJS 在模块之间共享?

javascript - jQuery DataTables 清除表除了第一行

javascript - 突变观察者事件新值

javascript - Mongodb不保存文档

javascript - 鼠标悬停时不显示 Dojox 工具提示

javascript - dojo amd init 方法自动运行

javascript - 如何动态更新道场树数据

javascript - 嵌套在 ng-repeat 中的 ng-show 不会更新

javascript - 将数据异步加载到 Dojo Tooltip 的 getContent()

javascript - Dijit ValidationTextBox : invalidMessage displayed or not, 取决于用户首先创建的内容