使用Dojo构建工具时出现问题,当尝试使用编译脚本时,“无法加载”错误

时间:2010-08-22 19:19:33

标签: javascript dojo

我跟随Rebecca Murphey的这篇文章:http://blog.rebeccamurphey.com/scaffolding-a-buildable-dojo-application

我用自己的文件结构替换了她的文件结构。

运行正常版本的脚本工作正常,但是当我使用构建工具编译它们时,脚本错误。

这很可能是一个小问题,如何通过我的Profile.js脚本引用文件,但也许有人可以在运行构建工具之前帮助我正确设置,这样编译后的文件就可以正常工作。

我的文件结构如下......

/万维网
/资产
/脚本
/类
build.sh
Init.js
Load.js
Profile.js
/道场
的dojo.js
/道场-SDK
的index.html

我的index.html文件包含以下代码......

<script>
    var djConfig = {
        modulePaths : {
            'Integralist' : '../Classes'
        }
    };
</script>
<script src="Assets/Scripts/Dojo/Dojo.js"></script>
<script>
    dojo.require('Integralist.Init');
</script>

...并且Init.js文件具有以下代码...

dojo.provide('Integralist.Init');
dojo.require('Integralist.Load');
dojo.declare('MyApp', null, {
    constructor: function(config) {
        this.version = config.version || '1.0';
        this.author = config.author || 'Unknown';
    }
});

var myapp = new MyApp({
    author: 'Mark McDonnell'
});

alert(myapp.author);
alert(myapp.version);

...最后,Load.js文件中没有任何内容,但是......

dojo.provide('Integralist.Load'); alert('I\'m the Load.js file');

......这一切都运行良好。当我加载index.html时,我收到了3条警报消息,非常棒。

当我尝试运行构建工具时会出现问题。

通过Mac OSX我找到/ Classes /目录并运行'sh build.sh',/ Classes /目录下的build.sh文件包含以下代码......

cd ../../../dojo-sdk/util/buildscripts

./build.sh profileFile=../../../Assets/Scripts/Classes/Profile.js releaseDir=../../../Assets/Scripts/Release

...现在,在运行构建工具后,我在my / Scripts /目录中创建了一个新的/ Release /目录,这个/ Release /目录包含...

/万维网
/资产
/脚本
/释放
/ Integralist
/类
Init.js
Init.js.uncompressed.js
/道场
- 加载dojo相关文件 -

...然后我创建了一个名为index-release-version.html的单独索引文件,并根据文章的建议更改了脚本代码,所以它看起来像这样......

<script src="Assets/Scripts/Release/Integralist/dojo/dojo.js"></script>
<script>
    dojo.require('Integralist.Init');
</script>

...从这里我得到以下错误......

Failed to load resource: the server responded with a status of 404 (Not Found)
Uncaught Error: Could not load 'Integralist.Init'; last tried '../Integralist/Init.js'

...仅供参考我的构建工具使用的Profile.js文件包含以下内容(在这里我认为问题可能)...

dependencies = {
    stripConsole : 'all',
    action : 'clean,release',
    optimize : 'shrinksafe',
    releaseName : 'Integralist',
    localeList : 'en-gb',

    layers: [
        {
            name: "../Classes/Init.js",
            resourceName : "Integralist.Init",
            dependencies: [
                "Integralist.Init"
            ]
        }
    ],

    prefixes: [
        [ "Integralist", "../Classes" ]
    ]
}

任何帮助都非常感激,因为我非常希望了解Dojo的工作方式: - )

谢谢!

微米。

2 个答案:

答案 0 :(得分:0)

你的index-release-version.html中有那个djConfig变量吗?看起来Dojo试图在../Integralist/Init.js找到init.js,但你不得不告诉它查看../Classes/Init.js

这就是您的modulePaths:{'Integralist' : '../Classes'}在您的Index.html

中所做的事情

答案 1 :(得分:0)

我建议从我的博客文章(http://github.com/rmurphey/dojo-scaffold)链接到我的回复邮件 - 我仔细检查它确实有效:) - 并对其进行更改,直到您的更改破坏了某些内容,而不是试图立即创建自己的结构。

乍一看,我不是100%清楚为什么你的目录结构中有一个Dojo.js文件,(这是基本的Dojo lib还是别的什么?),但Dojo的其余部分位于其他地方。如果你使用我提出的结构,你可以在使用构建文件时安全地删除djConfig声明,但正如Dan所说,如果你使用不同的配置,你可能需要保留它。