Dojo build 1.7 构建的软件包不起作用
Dojo build 1.7 built packages does not work
我正处于构建项目的开始,我遇到了一些错误,无法意识到为什么会发生这些错误。
您可以在下面看到my app.profile.js
文件的内容。我执行 从命令提示符"build profile=../../app.profile.js -r"
此行,该过程完成后我没有收到任何错误。我的问题是,如果我将这些软件包的发布(构建)版本复制到存在未构建版本的地方,我会收到太多的javascript错误,例如" Error: multipleDefine
"。即使我只复制道场、道场和 dijit 文件夹,同样的错误也会不断发生。
当我查看两个js文件的已构建和未构建之间的差异时(例如dojo/Deferred),我意识到的唯一区别是:
//built
define("dojo/Deferred", [
"./_base/lang",
"./promise/CancelError",
"./promise/Promise"
], function(
define([
"./_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"
]
}
}
};
Dojo 构建器将为每个模块定义添加一个模块标识符,除非您告诉它不要这样做。 这会产生多个定义错误。
从构建器文档中:
insertAbsMids (default = undefined)
- [真实] 使转换确保每个 AMD 定义 应用程序包括模块标识符参数。
- [假] 的 转换对定义中的模块标识符参数不执行任何操作 应用。特别是,虚假值不会导致 转换以删除存在于 源代码。
我遇到了完全相同的问题,直到我将插入AbsMids:false添加到我的个人资料中。
例如:
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" }
]
}
如果你的问题出在AMD模块define(id, [deps], factory)中创建的id。我遇到了类似的问题,我不得不手动删除压缩文件上的所有id:
//built
define([
"./_base/lang",
"./promise/CancelError",
"./promise/Promise"
], function()
或者,我必须要求模块使用 id 代替。
例如,我需要一个模块:
require(["app/Dialog"])
这与添加的 ID 不同。
require(["demo/app/Dialog"])
这是我让它工作的唯一方法。还有其他人知道如何删除 id 或我们应该始终拥有 id 的原因吗?不确定这是否与您的问题有关,但既然您显示了差异。
这将构建一个层,除了 discardLayer 中提到的组件外,还需要创建 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"
]
尝试代替exclude
,使用 layerDependencies
键 - 我认为 exlude 从您的dojo_source树中而不是dojo_release树中寻找应用程序/层/核心。因此,在构建时,您将排除未知组件。
上面的示例是我用来覆盖其他地方的 3 个废弃组件的东西,但它不适合您的需求。
您需要不为核心层设置discard
,而只需将其设置为依赖项(这将排除已构建的所有依赖项)。
然后,根据您使用的 dojo 版本,您应该调用dojo.require("layers.core"); dojo.require("layers.appcontext")
或require(["layers/core", "layers/appcontext"], function() { });
来断言这些层存在。
在使用其依赖项中的任何内容之前,请使用另一个 require 调用来拉入需求,例如 dojo.require("dijit.form.Button"); new dijit.form.Button({ ... });
.该层会将组件填充到缓存哈希 (dojo.cache) 中,并确保它们被完全声明,请拉入要求。
- 为什么我在谷歌闭包中编写的事件监听器不起作用
- Jquery 和闭包或函数引用不起作用
- Dojo build 1.7 构建的软件包不起作用
- AWS Javascript 开发工具包问题 - deleteObject 有效,但 deleteObject 不起作用
- DT 包:styleColorbar() 在 Android 平板电脑上不起作用
- 流星少包不起作用
- AES-KW的解包键功能在IE11中不起作用
- bower安装'dev'软件包的版本;不起作用
- 创建类时的闭包不起作用
- Javascript闭包不起作用
- VS2013-Web Essentials-“;更新所有捆绑包”;不起作用
- 闭包内部的Javascript事件处理程序“this”绑定不起作用
- 为什么在Javascript中使用闭包时mouseover事件不起作用?
- 闭包在函数作用域之外不起作用
- 在onerror属性中使用闭包似乎不起作用
- 闭包编译器@extends在使用“类”容器对象时不起作用
- 网络包.当键与模块名称相同时,ProvidePlugin 不起作用
- AngularJS: ng-controller on指令对指令内的跨包元素不起作用
- 循环中的javascript闭包不起作用
- javascript中带回调的闭包不起作用