问题标签 [cujojs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dojo - 使用dojo构建系统的wirejs和dojo
我有一个使用wirejs 进行依赖注入的dojo 应用程序。
当我尝试构建应用程序时,我在“when”和“meld”模块上遇到依赖错误。如下所示:
我的 dojo 构建配置文件的相关部分如下:
我在这里错过了什么吗?
谢谢 !
dojo - 使用dojo构建系统的wirejs和dojo (2)
(这与使用 dojo 构建系统的 wirejs 和 dojo相同,但有更多关于问题的详细信息和尝试过的解决方案。创建了重复的问题,因为这是在评论中提出的)。
在构建使用wire 的dojo 应用程序时,dojo 加载程序会undefinedModule
为“./lib/context”抛出一个我们无法摆脱的错误。
我wire
使用 git 子模块添加到一个大型的、正在工作的 dojo 项目中。事实证明,cujojswhen
和 cujojsmeld
也是必需的。我也将它们添加为 git 子模块。
在这个项目中,库不在应用程序文件夹 ( src/app
) 旁边,而是在src/lib
. 所以我有src/lib/wire
, src/lib/when
, , src/lib/meld
next tosrc/lib/dgrid
等。dojo
库有 2 层深:src/lib/dojo/dojo
,src/lib/dojo/dijit
和.src/lib/dojo/dojox
src/lib/dojo/util
版本:
- 道场 1.10.4
- 电线 0.10.9
- 当 3.7.2
- 融合 1.3.1
一旦我将以下包定义添加到dojoConfig
:
请注意,有必要添加main
条目。例如,这使得在依赖项列表中引用when/when.js
as成为可能,而不是cujojs 代码在内部执行的操作。"when"
"when/when"
因此,这在开发模式下有效。
接下来,我试图让构建工作。
在 中build.profile.js
,我再次添加了包引用。构建以多种方式失败。
首先,对于包,dojo 构建器期望文件中有一个dojoBuild
属性package.json
,它引用一个<mypackage>.profile.js
或package.js
文件,它本质上定义了包的构建配置。这个构建配置通常(它在我们所有的包中)只是一个resourceTags
对象,其函数定义了包中的 AMD 资源文件、测试文件以及应按原样复制的文件。
cujojs 包没有可用于dojo 构建器的构建定义。
构建器首先抱怨这些包没有构建配置,其次资源没有被标记为 AMD 资源(这是构建配置文件的主要原因)。
由于我不想更改我使用的外部库的文件,因此我不倾向于向dojoBuild
cujojs 包添加属性和构建配置文件,因此我寻求解决方法。
单步执行dojo builder代码后,发现builder报错package.json
文件没有dojoBuild
属性,最后只看内部包定义结构获取resourceTags
对象。内部包定义结构从主构建配置文件中的包定义开始。所以,我最终在那里捎带了一个resourceTags
对象:
请注意和resourceTags
的包定义中wire
的额外属性。我保持“简单”,只使用一个通用对象来处理所有 3 种情况,. 这是一个非常标准的设置,除了,我稍后会介绍。when
meld
generalResourceTags
resourceTags
isGivingTroubleButUnused
请注意,我尝试了在https://github.com/cujojs/when/wiki/Using-with-Dojo for中明确提到的解决方案when
,但它不起作用。
这样,我们从 dojo builder 那里得到了一份相当不错的报告,但它提到了一些缺失的资源。例如,某些模块需要 jquery。但是,这些模块没有在这个项目中使用。
请注意,wirejs 和 dojo 中提到的解决方案使用 dojo 构建系统,捎带packageJson
可能会更好。我没有测试过。
我最终引入了isGivingTroubleButUnused
复制这些模块而不处理它们,因为我们无论如何都不使用它们。请注意,其中 1 个问题在when/generator
. Closure 编译器在此处看到语法错误(请参阅https://github.com/cujojs/when/issues/429)。
此设置的最终结果是构建没有错误。
然后,我们想对此进行测试……但它失败了。我们得到的第一个错误确实是 dojo 加载程序抛出了一个undefinedModule
Error
for "./lib/context"
。这确实发生在第 23 行的唯一位置wire/wire.js
:
这是为了解决wire/lib/context.js
,显然这在开发(取消构建)模式下有效。
在任何情况下,require
它都旨在成为上下文相关的要求(参见 dojotoolkit.org /documentation/tutorials/1.10/modules_advanced/,“有条件地要求模块”),因为模块引用是相对的。但这不应该是它无法构建且无法构建的原因。
接下来,我尝试只复制所有wire
,when
和meld
资源。如果资源不包含在层的 dojo 构建中,它只会退回到异步加载。所以,这可以工作:
构建现在通过,并复制所需的内容。当然,还有更多错误,应用程序代码引用的地方wire
,但这是意料之中的(error(311) Missing dependency. module: MY_MODULE; dependency: wire!SOME_PACKAGE/_wire-serverRequests
)。
然而,浏览器在同一个地方给出了同样的错误:一个undefinedModule
Error
for "./lib/context"
。
此时的工作假设是wire
,名称下使用的函数require
在构建版本中不是上下文敏感的需求,而是在未构建版本中。
这不是真的。首先,我更改了wire
代码或测试以阅读
使参考绝对。同样的问题。
然后,我尝试使用 sourceMaps ( useSourceMaps = true
) 进行调试。这是一场噩梦,但我相信我看到require
使用的是相同的,上下文相关的要求。
也许“预加载”有效?因此,在顶部的 HTML 页面中,我将所有代码都用
这确保context
在我们做任何其他事情之前加载。同样的错误。
接下来,我在代码中添加了日志记录wire/lib/context
(使用error
, 因为其他消息在构建中被剥离)。
在 unbuild 版本中,我看到所有消息。在构建版本中,我在错误发生之前只看到“定义上下文”。所以问题不在于“加载” wire/lib/context
,而在于定义它,并且可能在于加载或定义when
!
所以,我申请了同样的技巧when
现在unbuild版本有一个惊喜。输出是:
这意味着when
定义在定义之前 context
开始。这很奇怪,因为我没有看到任何代码可以告诉加载器when
在context
, 之前的行
在“定义上下文”的记录之后执行。
在构建版本中,我们仍然只得到
在错误发生之前!这种行为明显不同!
接下来,我删除了预加载代码。取消构建代码给出相同的输出,构建代码现在在错误发生之前没有消息。
所以无论如何,这段wire
代码在加载过程中做着我不期望和不理解的事情。
我确实希望这个额外的细节会触发某人让我们走上正确的轨道......
javascript - 使用transducers-js 和 most.js 创建从 Json 到流的管道
我有这个AMD 模块
Main 函数获取项目列表,然后按“类型”属性对它们进行分组。之后,它创建并附加 <li> 元素。最后,它创建了一个点击流。我是反应式编程和转换器的新手。
但我想知道是否有办法创建管道。
我很麻烦,因为 groupby 是一个减少并且不能在转换器中组合它。我确定我错过了一些东西。谢谢
javascript - 在等待 cujojs 的承诺时显示加载微调器?
我正在开发一个 Web 应用程序,我在其中使用带有 whenjs 扩展的 cujojs 进行异步操作。但是,我通常只是绑定我们的一个服务接口,让它们完成所有繁重的工作。
当应用程序等待来自服务器的响应时,有没有办法自动显示微调器/加载器?角落里可能只是一些视觉提示,让用户知道一切都在搅拌。
我要避免的一件大事是每次打电话时都必须手动显示/隐藏加载微调器。
javascript - mostjs - 从自定义源创建流
我很好奇当前从可能不符合现有流创建方法的源创建流的最佳实践(https://github.com/cujojs/most/blob/master/docs/api.md)
使用 Firebase 的示例ref.on('child_added', function(snap){})
:
我不能使用
.fromEvent
...虽然 ref 实现了某种on
,但它似乎不符合 EventEmitter 接口(addEventListener、removeEventListener)
手动发出事件,是我目前能想到的最好的......
是否有类似的机制来自定义创建流,例如 la Rx?
我有没有更好的方法?
javascript - 使用 meld.js(cujojs) 为独立的 javascript 函数执行 AOP 不起作用
当我尝试使用meld.js(来自cujojs)为独立的javascript函数实现AOP时,它没有执行建议。我一直在尝试使用下面的代码。
test(5,6);
:
5 和 6
但是,当我将函数包装在某个对象(myo)中时,它就可以工作了。我不想将函数包装在任何对象中。
myo.test(5,6);
:
5、6 和 11
你能纠正我哪里做错了吗。
javascript - 我可以在方法执行后添加方法吗?
考虑我有课
在使用这个名为 meld js 的库调用方法后,我必须添加一些消息(https://github.com/cujojs/meld/blob/master/docs/api.md#meldafter)
我的尝试
这是正确的方法吗?