4

我们在我们的应用程序中使用 dojo 1.7.2。即使AMD在这个版本中支持,我们根本没有使用这种方法。我们仍在使用传统dojo.require("package")方法。

我们需要为我们的应用程序创建一个发布版本。以下是我们用来执行此操作的配置文件。我们正在使用ANT任务来执行此操作。我们的个人资料非常简单,其中没有太多的道场要求。

dependencies = {
    layers: [
       {
            name:"cutom_dojo.js",
            resourceName:"custom-dojo",
            dependencies:[
                "dojo.NodeList-traverse",
                "dojo.io.iframe",
                "dojo.date",
                ]
       }
    ],
    prefixes: [
        [ "dijit", "../dijit" ],
        [ "dojox", "../dojox" ]
    ]
}

现在我们正在使用下面的 ANT 任务创建发布版本。

<target name="create-dojo-release">
        <echo message="Starting Dojo Release Build " />
        <java fork="true" dir="${shrinksafe.util.path}/buildscripts" classname="org.mozilla.javascript.tools.shell.Main">
            <classpath>
                <pathelement location="${shrinksafe.util.path}/shrinksafe/js.jar" />
                <pathelement location="${shrinksafe.util.path}/closureCompiler/compiler.jar"/>
                <pathelement location="${shrinksafe.util.path}/shrinksafe/shrinksafe.jar" />
                <pathelement path="${java.class.path}" />
            </classpath>
            <arg value="../../dojo/dojo.js"/>
            <arg value="baseUrl=../../dojo"/>
            <arg value="releaseDir=${dojo.release.dir}"/>
            <arg value="load=build"/>
            <arg value="profile=${dojo.profile.file}" />
            <arg value="action=clean,release" />
            <arg value="version=1.7.2" />
            <arg value="releaseName=cutom_dojo" />
            <arg value="cssOptimize=comments" />
            <arg value="copyTests=false" />
        </java>
        <echo message="Dojo Release build successfull." />
    </target>

我们在 dojo 文件夹中获得了一个 custom_dojo.js 文件。我们在我们的应用程序中包含了这个 JS 文件。当我们打开这个 JS 文件并搜索层中提到的包时,它们都在那里可用。但是当我们访问应用程序页面时,我们仍然会看到为各个模块发送单独的 HTTP 请求,即使 custom_dojo.js文件包含在页面顶部。如果我们以正确的方式这样做,您能否建议我们?

4

1 回答 1

0

您似乎正在以不推荐使用的旧格式编写构建配置文件。新的(V1.6 后)方式是这样的:

var profile = (function(){
  return {
    basepath: ".",
    packages: [
      {name: "dojo", location: "./dojo-release-1.7.4-src/dojo"}
    ],
    layers: {
      "dojo/custom_dojo": {include: [
        "dojo/NodeList-traverse",
        "dojo/io/iframe",
        "dojo/date"
      ]}
    }
  };
})();

当然替换您自己的路径等。另外请注意,我用新的斜杠表示法而不是旧的点分表示法指定模块 ID。

然后我像这样构建它:

dojo-release-1.7.4-src/util/buildscripts/build.sh --release --profile test.profile.js

我已经使用 Dojo 1.7.4(最新的 1.7 版本)对上述构建配置文件进行了尝试,并使用以下测试页面按预期工作,无需再次下载模块。

<!DOCTYPE html>
<html>
<head>
    <title>test</title>
    <script type="text/javascript" data-dojo-config="async:0" src="./dojotk/dojo/dojo.js">/*empty*/</script>
    <script type="text/javascript">
      // load the custom layer
      dojo.ready(function() { dojo.require('dojo.custom_dojo') });;

      // to be called on button click
      function myFun() {
        var ifr = dojo.require('dojo.io.iframe');
        // check module has been loaded
        if (ifr) {
          alert('success: '+ifr);
        };
        return false;
      }
    </script>
</head>
<body>
<input type="button" value="click" onclick="return myFun();" />
</body>
</html>

参考资料 确实,我必须以艰难的方式学习这一点,因为文档不太容易阅读,并且 Dojo 源中的示例使用新旧构建配置文件格式的混合,这也无济于事。但是,这些链接非常有用。

享受马丁

于 2013-04-28T13:19:38.890 回答