Javascript Dojo build 1.7构建包不工作
我正在开始构建我的项目,我遇到了一些错误,无法理解为什么会发生这些错误 您可以在下面看到Javascript Dojo build 1.7构建包不工作,javascript,build,dojo,Javascript,Build,Dojo,我正在开始构建我的项目,我遇到了一些错误,无法理解为什么会发生这些错误 您可以在下面看到my app.profile.js文件的内容。我执行 “build profile=../../app.profile.js-r”命令提示符中的这一行,我在该过程完成后没有收到任何错误。我的问题是,如果我将这些包的发布(构建)版本复制到存在未构建版本的地方,就会出现太多javascript错误,如“Error:multipleDefine”。即使我只复制dojo、dojox和dijit文件夹,同样的错误也会不
my app.profile.js
文件的内容。我执行
“build profile=../../app.profile.js-r”
命令提示符中的这一行,我在该过程完成后没有收到任何错误。我的问题是,如果我将这些包的发布(构建)版本复制到存在未构建版本的地方,就会出现太多javascript错误,如“Error:multipleDefine
”。即使我只复制dojo、dojox和dijit文件夹,同样的错误也会不断发生
当我查看两个js文件的已构建和未构建之间的差异时(例如dojo/Deferred),我意识到的唯一差异是:
//built
define("dojo/Deferred", [
"./_base/lang",
"./promise/CancelError",
"./promise/Promise"
], function(
所以一开始我有点结巴。我想尝试使用层来尽快减少http请求,但我需要一些关于我提到的情况的帮助。任何帮助都将不胜感激,谢谢 app.profile.js:
var profile = {
basePath: "..",
layerOptimize: "shrinksafe.keepLines",
optimize: "shrinksafe",
releaseDir: "./release",
hasReport: true,
packages: [
{
name: "dojo",
location: "./dojo"
},
{
name: "dijit",
location: "./dijit"
},
{
name: "app",
location: "./app"
},
{
name: "dtk",
location: "./dtk"
},
{
name: "dojox",
location: "./dojox"
}
],
layers: {
"app/layers/core": {
include: [
"dojo/_base/declare",
"dtk/core/ILifeCycle",
"dtk/core/AppConfig",
"dtk/core/TopicContext",
"dtk/core/NavigationContext",
"dojo/require",
"dojo/_base/Deferred",
"dojo/DeferredList",
"dojo/_base/lang"
]
},
"app/layers/appcontext": {
include: [
"dtk/core/AppContext"
],
exclude: [
"app/layers/core"
]
}
}
};
这将构建一个层,除了该层中提到的组件外,还需要创建dojox.image.Gallery所需的所有模块
layers: [ {
name: "../dojox/discardLayer.js",
discard: true,
dependencies: [
"dojox.image.Gallery",
"dojox.image.SlideShow",
"dojox.image.ThumbnailPicker"
]
},{
name: "../drops/layer.js",
layerDependencies: [ "../dojox/discardLayer.js" ],
dependencies: [
"dojox.image.Gallery"
]
尝试使用layerDependencies
键而不是exclude
,我认为exlude在dojo_源代码树中而不是在dojo_发布树中查找应用程序/层/核心。。因此,在构建时,您排除了未知组件
上面的示例是我用来覆盖其他地方丢弃的3个组件的,但是它不适合您的需要
您需要为核心层设置discard
,而只需将其设置为依赖项(这将排除对层的所有依赖项,这些层已经构建好)
然后,根据您使用的dojo版本,您应该调用dojo.require(“layers.core”);require(“layers.appcontext”)
或require([“layers/core”,“layers/appcontext”],function(){})
以断言这些层存在
在使用依赖项中的任何内容之前,请使用另一个require调用,例如,
dojo.require(“dijit.form.Button”);新的dijit.form.Button({…})代码>。该层将把组件填充到缓存的散列(dojo.cache)中,为了确保它们被完全声明,请拉入需求。如果您的问题是在AMD模块定义中创建的id(id,[deps],factory)。。
我遇到了类似的问题,我必须手动删除压缩文件上的所有id:
//built
define([
"./_base/lang",
"./promise/CancelError",
"./promise/Promise"
], function()
或者,我必须要求模块使用id
例如,我需要一个模块:
require(["app/Dialog"])
与添加的id不同
require(["demo/app/Dialog"])
这是我让它工作的唯一方法。其他人知道如何删除id或为什么我们应该始终拥有id吗?不确定这是否与你的问题有关,但因为你展示了差异 Dojo builder将向每个模块定义添加模块标识符,除非您告诉它不要这样做。这会产生倍增精细误差
从:
插入BSMIDS(默认值=未定义)
- [truthy]使转换确保每个AMD定义
应用程序包括一个模块标识符参数
- [falsy]这个
transform对define中的模块标识符参数不做任何处理
应用。特别是,falsy值不会导致
转换以删除中存在的模块标识符参数
源代码
我遇到了完全相同的问题,直到我在我的个人资料中添加了insertAbsMids:false
例如:
谢谢你的回答,现在考虑到你的回答,我正在改变我的图层。但另一件事是,当我从我的配置文件中删除整个layers部分并构建它,然后将dojo、dojox和dijit的构建版本替换为非构建版本时,仍然会出现js错误。所以我认为这不是关于图层部分的错误,我是不是想错了?
require(["demo/app/Dialog"])
var profile = {
basePath: "./",
releaseDir: "release",
action: "release",
layerOptimize: "shrinksafe",
optimize: "shrinksafe",
cssOptimize: "comments",
mini: false,
insertAbsMids: false,
packages: [
{ name: "dijit", location :"dijit" },
{ name: "dojox", location :"dojox" },
{ name: "dojo", location :"dojo" }
]
}