我跟随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的工作方式: - )
谢谢!
微米。
答案 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所说,如果你使用不同的配置,你可能需要保留它。