在 dojo 1.7.2 中构建

Posted

技术标签:

【中文标题】在 dojo 1.7.2 中构建【英文标题】:Make a build in dojo 1.7.2 【发布时间】:2012-02-19 19:25:02 【问题描述】:

好吧,我阅读了有关构建和道场的所有内容。三天的噩梦等等......需要一些帮助。

我正在使用最新版本的 dojo。 1.7.2 英寸:

</sites/somesite/scripts/dojo17>
which contains 
--dojo
--dijit
--dojox
--utils

我使用以下个人资料:

dependencies = 
stripConsole: "all",
action: "release",
optimize: "shrinksafe",
layerOptimize: "shrinksafe",
//optimize: "closure",
//layerOptimize: "closure",
//mini: true,
//localeList : 'en-us', 
//cssOptimize: "comments",      
//selectorEngine: "acme",
releaseName: "content7",
layers: [

    // This is a specially named layer, literally 'dojo.js'
    // adding dependencies to this layer will include the modules
    // in addition to the standard dojo.js base APIs.
    name: "dojo.js",
    customBase : true,
        dependencies: [ 
          "dojo.fx",
          "dijit.form.Button",              
          "dojox.gauges.AnalogGauge",
          "dojox.gauges.AnalogArcIndicator",
          "dojox.gauges.AnalogNeedleIndicator",
          "myApp.smartmix"
    ]           
    
],
prefixes: [
    [ "dijit", "../dijit" ], 
    [ "dojox", "../dojox" ],
    [ "myApp", "../../../myApp" ]
]
;

然后我使用这个构建脚本

./build.sh profile=../../../../myApp/myApp.profile.js releaseDir=../../../release

我得到了

</sites/somesite/scripts/release/content7>
which contains
--dijit
--dojo
--dojox
--myApp

现在在我的 index.html 文件中

<script type="text/javascript">
//<![CDATA[
    var djConfig = 
        parseOnLoad: true,
        isDebug: false,
        modulePaths: 
            'myApp': '../myApp'
        
    ;
//]]>
</script>

<script type="text/javascript" src="scripts/release/content7/dojo/dojo.js"></script>

<script>
    dojo.require('myApp.smartmix');
</script>

是的,这将在没有构建的情况下加载的 230 个文件减少到 153 个文件。 但是我(想)相信仍然可以减少到一到两个文件。

但是如何?????

拜托,我们将不胜感激!!!!

【问题讨论】:

【参考方案1】:

好的,您的个人资料不正确。

第一个:您正在使用customBase,这是用于创建最小版本的dojo 核心的高级属性。我不认为你想要那个,是吗?通常,您只需让 dojo 正常构建其核心,然后在输出目录中以 dojo.js 结尾。

第二个:每个layer 条目都会生成一个缩小的.js 文件,其中包含dependencies 中的所有文件。

因此,如果您希望 myApp 的内容在构建的 JS 文件中,您需要创建一个层,并将您的文件放入其依赖项中。

Dojo 仍将生成所有单独的文件 - 但您不必部署它们。只需部署层文件。我通常有一个用于 Dojo 核心的层,一个用于我想要的 dijit/dojox 东西的层,然后是一个用于我的自定义 JS 的层。然后是三个js文件,dojo会在dojo目录下输出,在HTML页面中使用。

【讨论】:

1st:好的,我暂时删除了customBase,因为我真的想要一个非常小的 .js。 2nd:我需要一个包含所有依赖项的缩小的 .js,这样我的 html 就不必调用所有其他的 .js(153 个文件!!!!)。 3rd 构建仍然生成 153 个文件。我只想要一个包含所有依赖项的文件。 Dojo 仍将创建所有单独的文件 - 但您不必部署它们。您只需部署为您的图层创建的文件。我在你的个人资料中没有看到你有一个层来收集所有你的自定义 JS,而你需要一个。【参考方案2】:
...
layers: [

// this is a layer 'application', which will cache all 
// dependencies to smartmix and declare smartmix in the same file
    name: "../../../myApp/smartmix.js",
        dependencies: [ 
          "dojo.fx",
          "dijit.form.Button",              
          "dojox.gauges.AnalogGauge",
          "dojox.gauges.AnalogArcIndicator",
          "dojox.gauges.AnalogNeedleIndicator",
          "myApp.smartmix"
    ]           
    
],
...

你只需要两个请求;

&lt;script src=..dojo.js&gt;&lt;/script&gt;

&lt;script&gt;require(["myApp.smartmix"], function(smartmixApplication) );&lt;/script&gt;

【讨论】:

以上是关于在 dojo 1.7.2 中构建的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉 Dojo 构建忽略“缺失”模板

如何设置包含多个应用程序的 Dojo 构建流程?

Dojo 构建 profile.layers 与 profile.dependencies.layers?

如何从AMD dojo创建构建

请求已内联 Dijit 模板的 Dojo 构建

如何使用简单的 Dojo 1.8 构建?