问题标签 [almond]
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.
javascript - 为什么串联的 RequireJS AMD 模块需要加载器?
我们在开发过程中喜欢 RequireJS 和 AMD,我们可以在其中编辑模块,在浏览器中点击重新加载,然后立即看到结果。但是当需要将我们的模块连接到一个文件中以进行生产部署时,显然必须有一个 AMD 加载器仍然存在,无论该加载器是 RequireJS 本身还是它的较小合作伙伴“almond”,如下所述:
http://requirejs.org/docs/faq-optimization.html#wrap
我的困惑是:为什么需要一个装载机?除非您有非常不寻常的情况需要您require()
在模块内部进行调用,否则似乎可以在没有加载程序的情况下连接一系列 AMD 模块。最简单的可能示例是如下所示的一对模块。
ModA.js:
ModB.js:
鉴于这两个模块,连接器似乎可以简单地生成以下文本,而不会给生产服务器或浏览器带来 RequireJS 或 Almond 所需的额外带宽或计算负担。
我想象一个产生的连接器(我正在使用 chevron-quotes «,» 来显示上面两个模块的片段被插入的位置):
据我所知,这将正确地重现 AMD 的语义,并且使用最少的无关胶水 JavaScript。有这样的连接器可用吗?如果不是这样,我会不会傻到认为我应该写一个 - 真的很少有代码库由简单而干净的模块组成,define()
并且不需要require()
在内部进行进一步的调用来启动以后的异步代码获取?
requirejs - 使用带有杏仁的 grunt requirejs 会导致“未定义”
在我的grunt.js
文件中,我有
运行会用一些缩小grunt requirejs:dist
的文件填充tmp/js
目录 - 其中包括一个很大的 main.js 文件(一切似乎都按预期捆绑在这个文件中) - 但是当我想像这样包含这个文件时
它导致一个"Uncaught ReferenceError: define is not defined"
使用杏仁背后的意图是我不需要加载require.js
文件来加载我的优化文件 - 知道如何让它工作吗?
脚注:我已经设法这样做了,除了以前main-built.js
编译过一个文件,但是这似乎不再是这种情况了(更新...... -.-)
javascript - Requirejs,杏仁,骨干,车把
这是我的情况,将 Backbone 和 Handlebars 与 Requirejs 一起使用。
我遵循 CommonJS 模块定义风格,因为我发现自己更适应它:
这是我的requirejs配置:
优化前一切运行顺利,没有出现任何问题。
但是,在使用 r.js 优化之后,依赖项似乎中断了。我想在生产中使用 Almond js,所以这是我的构建文件:
现在,当我在浏览器中运行优化的 javascript 时,我得到的只是错误消息,告诉我 jQuery 和 Handlebars 是未定义Backbone.$
的(当然也不是)。
一个简单的解决方法是强制加载 jQuery,并将其分配给 Backbone,如下所示:
但这对我来说听起来很愚蠢和多余。我觉得我做错了什么,但不知道是什么。
优化后,Handlebars 也无法加载为依赖项。如果我强制加载它(就像我对 jQuery 所做的那样),我会在构建过程中收到一条错误消息,告诉我fs
找不到模块(一个 npm 包)。
我用谷歌搜索,但在谷歌群组(https://groups.google.com/forum/?fromgroups=#!topic/requirejs/lYwXS-3qjXg)上只发现了这个似乎与我的问题有关的主题,即使建议的解决方案是根本不工作。
requirejs - Requirejs + 文本插件 + 糖语法 + almond.js
我正在使用糖语法将模板加载到我的视图中:
一切正常,但是当我运行 r.js 优化器时出现错误
javascript - 内联 require() 在 requirejs 中工作,但不适用于优化的 almond 构建
正如标题所说,我的内联 require 调用在非优化的 requirejs 运行中工作,但在使用 grunt 和 almondjs 构建时不起作用。
任何文件的顶部可能是:
后来基于业务逻辑,我希望能够需要另一个文件
我也尝试了替代语法:
这一切都使用未构建的 requirejs 版本。但是当我用 grunt 和 almond 构建它时它又失败了
如果我在定义调用中将它放在文件顶部,我可以让它在杏仁中正常工作,但是在 AMD 中保持精简不是更可取吗?
requirejs - 如何用 yeoman Gruntfile.js 用 almondjs 替换 requirejs?
所以我使用 yeoman init 创建了一个项目,它使用了 requirejs,我希望用 almondjs 替换 requirejs 以使其加载更快。我怎样才能做到这一点?
AlmondJS 在这里:https ://github.com/jrburke/almond
RequireJS 在这里:http ://requirejs.org/
约曼:http: //yeoman.io/
在 Gruntfile.js 中唯一提到 require.js 是:
requirejs - 如何在不更改 index.html 的情况下集成杏仁
我有这个 build.js 文件:
在我的 index.html 中,我有:
当我使用以下方法优化应用程序时:
所有 app 目录都复制到 dist 目录中。这种方法真的很方便,因为我不需要做任何更改,并且可以在优化后立即部署项目。
问题是我的代码使用 require.js 会导致开销。我怎样才能整合杏仁?我仍然将 app 目录复制到 dist 目录中,但我不想在每次优化调用后编辑我的 index.html。
有没有办法整合杏仁?
optimization - 最高效的多页 RequireJS 和 Almond 设置
我在使用 RequireJS 的网站上有多个页面,并且大多数页面都有独特的功能。它们都共享许多通用模块(jQuery、Backbone 等);它们也都有自己独特的模块。我想知道使用r.js优化此代码的最佳方法是什么。我看到 RequireJS 和 Almond 的文档和示例的不同部分提出了许多替代方案——所以我想出了以下我看到的可能性列表,我在问哪个是最推荐的(或者是否有另一种更好的方法) :
- 使用Almond为整个站点优化单个 JS 文件,该文件将加载一次然后保持缓存。这种最简单方法的缺点是我将加载到每个页面上用户不需要该页面的代码(即特定于其他页面的模块)。对于每个页面,加载的 JS 都会比它需要的大。
- 为每个页面优化单个 JS 文件,其中包括通用模块和页面特定模块。这样我就可以在每个页面的文件中包含 Almond,并且在每个页面上只加载一个 JS 文件——这将比整个站点的单个 JS 文件小得多。不过,我看到的缺点是公共模块不会缓存在浏览器中,对吧?对于用户访问的每个页面,她都必须重新下载大量 jQuery、Backbone 等(通用模块),因为这些库将构成每个唯一单页 JS 文件的大部分。(这似乎是RequireJS 多页示例的方法,只是该示例不使用 Almond。)
- 为常用模块优化一个 JS 文件,然后为每个特定页面优化一个 JS 文件。这样,用户将缓存公共模块的文件,并且在页面之间浏览时,只需要加载一个特定于页面的小 JS 文件。在这个选项中,我看到了两种完成它的方法,包括 RequireJS 功能:在所有页面上的公共模块之前加载文件 require.js,使用
data-main
语法或普通<script>
标签——根本不使用 Almond。这意味着每个页面将包含三个 JS 文件:require.js、公共模块和页面特定模块。湾。似乎这个要点正在建议一种将 Almond 插入每个优化文件的方法 ---- 这样我就不必加载 require.js,而是将 Almond 包含在我的公共模块和特定于页面的模块中。那正确吗?这比预先加载 require.js 更有效吗?
感谢您提供有关执行此操作的最佳方法的任何建议。
javascript - 避免 RequireJS 主文件和 r.js 构建文件中的“路径”配置重复?
这是(部分)我的文件夹结构:
- 节点测试
- bower_components
- 建造
- 上市
- main.js
- 构建.js
r.js -o build.js
使用以下配置运行优化器可以正常工作:
但是,如果我删除其中paths
的配置build.js
将不再起作用:
跟踪依赖项:./almond/almond 错误:ENOENT,没有这样的文件或目录 'C:\Users\Marco\Documents\Progetti\nodejs-opt\bower_components\domready.js' 在模块树中:../public/main
错误:错误:ENOENT,没有这样的文件或目录 'C:\Users\Marco\Documents\Progetti\nodejs-opt\bower_components\domready.js' 在模块树中:../public/main
我想保持干爽,避免两次添加依赖项。这可能吗?