问题标签 [requirejs]

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.

0 投票
2 回答
8257 浏览

javascript - 当可能必须删除模块以节省内存时,是否可以使用 requirejs

我们在嵌入式环境中开发应用程序。它是一个高级计算环境,在busybox Linux 系统之上具有完整的网络浏览器。唯一的例外是系统的系统内存量有限。

我们的应用程序是用 JavaScript 构建的,并在基于 Webkit 的网络浏览器中运行,并且由许多按顺序加载的 JavaScript 模块组成(效率不高)。

一些模块提供由多个模块使用的通用功能。我们正在使用 requirejs 转换我们当前的 javascript 加载器,但是我们必须首先解决一个特定的需求。

是否可以在使用 requirejs 加载模块时卸载它?假设我们使用以下方式动态加载模块:

这对于加载和运行“somemodule”以及解决“somemodule”的所有依赖项非常有效,并且requirejs框架将为未来的请求存储对“somemodule”的引用。

如果我们在某些时候需要回收内存,例如为了能够加载和运行无限数量的模块,我们必须在一段时间后开始删除其中的一些。在不改变内部实现的情况下使用 requirejs 是否可行?

以前有没有人处理过这种问题?大多数单页 JS 应用程序在桌面 PC 上的网络浏览器中运行,内存使用通常不是主要问题。

0 投票
1 回答
1456 浏览

google-chrome - RequireJS“传统”脚本加载又名订单插件

很长一段时间以来,我一直在反对这一点。我正在加载大约 60 个需要尊重特定依赖结构的脚本文件。在 requirejs 中正常加载这些是行不通的,所以我开始使用 order 插件。

order 插件在 Firefox 3.6.12、IE7、IE8 中运行良好,但我的应用程序在 Chrome 8 中爆炸式增长。Chrome 似乎以任何感觉的顺序执行。这是一个已知问题还是有一些解决方法?

0 投票
5 回答
64013 浏览

jquery - 如何同时使用 requireJS 和 jQuery?

我想使用requireJS,我正在使用jQuery。我不想使用 requireJS 和 jQuery 的组合版本,因为我没有使用最新的 jQuery 版本。我使用 requireJS 的最佳方式是什么?

0 投票
3 回答
12934 浏览

dependencies - Maven项目中的RequireJS编译与外部JS依赖

我有一个使用 Maven 构建的 Web 项目,我正在尝试找出使用 RequireJS 编译器编译 JavaScript 文件的最佳方法(这个问题也适用于任何编译器/压缩器)。

我有一个可行的设置,但需要改进:

我已经打包了第 3 方 JavaScript 库,它们作为依赖项被下载,然后与 WAR Overlay 插件一起添加。

我有一个 Exec 插件任务,它在目标目录中运行 RequireJS 编译器。我目前在包目标运行后手动运行exec:exec(因此 WAR 内容放置在目标目录中)。

我想要的是让 JS 编译成为主要(Java)编译的一部分。JS 编译器本身(需要 JS)在编译后发生的 WAR 覆盖阶段作为依赖项下载。因此,我需要下载和解压缩 Require JS 文件,并且我需要在 Java 编译之前/期间/之后使用这些文件运行 JS 编译。

我敢肯定有几种方法可以实现这一目标。我正在寻找最优雅的解决方案。


更新:现有的 POM 片段

我有 JavaScript 依赖项,我已经压缩并添加到我们的存储库管理器中:

请注意,RequireJS 本身(编译其余库所必需的)也作为外部依赖项加载。所以第一件事是,我需要先下载并解压缩此依赖项,然后才能开始进行 RequireJS 编译。

使用 WAR Overlay 插件将这些依赖项添加到 WAR:

尽管我不需要requirejs/build/**最终加入 WAR,但我还是将它作为覆盖的一部分来获取解压缩的 RequireJS 构建脚本,只是因为我还没有找到更好的方法。

然后我有一个执行编译的 Exec 插件任务。但请注意,此任务尚未添加到正常的编译工作流程中:我必须在 WAR 打包完成mvn exec:exec 后手动调用它:

所以,一些问题是:

  1. 如何为编译和 WAR 打包步骤提取单个压缩依赖项的不同部分?还是我必须创建两个 zip 文件,一个仅包含运行时内容,另一个用于编译脚本?
  2. 我想exec:exec理想地在编译期间触发,或者如果不是,就在 WAR 打包之前触发。我怎么做?

我实际上已经尝试了很多没有成功的东西,所以我希望我不会显得懒惰地发布大量代码并等待答案:) 只是我还没有完全了解 Maven 的目标/阶段等工作呢。

0 投票
2 回答
29936 浏览

javascript - 了解何时以及如何使用 Require.JS

我刚刚开始使用 Require.JS,我对应该使用它的适当情况以及在这些情况下使用它的正确方法有点不清楚。

以下是我目前使用 Require.JS 进行设置的方式。我有两个功能,functionA()functionB()。这两个功能都需要一个附加功能functionC()才能正常工作。

我只想在必要时加载 functionC(),即要调用 functionA() 或 functionB() 时。所以我有以下文件:

函数C.js

函数A.js

函数B.js

那么,这样设置正确吗?如果我最终在同一页面上同时调用 functionA() 和 functionB(),是否需要完成额外的工作,因为它们都加载了 functionC.js 文件?如果是这样,那有问题吗?如果是这样,有没有办法设置它,以便他们首先检查 functionC.js 是否已加载,并且仅在尚未加载时才加载它?最后,这是对 Require.JS 的适当使用吗?

0 投票
1 回答
4563 浏览

javascript - RequireJS - 加载一个已经加载的模块

我正在尝试使用RequireJS加载浏览器模块,但遇到了一个有趣的问题。

我有 3 个名为 的模块ab并且c有这些简单的源代码:

一个.js

b.js

c.js


当我自己加载模块a时,一切正常,以下代码运行并返回“A”:

但是,如果我需要两个不同的模块,其中一个已经加载:

RequireJS 会报错:

当它显然已经加载时。

有没有人遇到过这个问题?我该如何解决?

0 投票
1 回答
1147 浏览

javascript - 为什么使用优先级时RequireJS不起作用?

当使用没有“优先级”的 RequireJS 时,它可以工作:

但是一旦我添加“优先级”,它就会停止工作:

我究竟做错了什么?

ps 对于任何想知道为什么我不使用 RequireJS-jQuery 的人来说,这是一种偏好 =]

0 投票
3 回答
10156 浏览

jquery - 使用 requirejs 和 jquery,而不破坏全局 jquery?

我第一次在项目中使用 requirejs。我在一个已经有很多 Javascript 的环境中工作,我正在寻找干净的方法来引入我自己的代码。

我遇到的问题是我似乎找不到一个可以加载的 jQuery 模块,它不会破坏现有的 jQuery。

令我惊讶的是,甚至 require-jquery.js 也引入了 jQuery 的全局版本。有没有办法在不引入任何全局变量的情况下将 jQuery 作为模块加载?

0 投票
2 回答
55075 浏览

javascript - RequireJS:如何定义包含单个“类”的模块?

我有许多 JavaScript “类”,每个类都在自己的 JavaScript 文件中实现。对于开发,这些文件是单独加载的,对于生产它们是连接的,但是在这两种情况下,我都必须手动定义加载顺序,确保如果 B 使用 A,则 B 在 A 之后。我计划使用RequireJS作为CommonJS Modules/AsynchronousDefinition自动为我解决这个问题。

有没有比定义每个导出一个类的模块更好的方法来做到这一点?如果不是,您如何命名模块导出的内容?如下例所示,导出类“Employee”的模块“employee”对我来说不够干。

0 投票
7 回答
29865 浏览

javascript - How to handle circular dependencies with RequireJS/AMD?

In my system, I have a number of "classes" loaded in the browser each a separate files during development, and concatenated together for production. As they are loaded, they initialize a property on a global object, here G, as in this example:

Instead of using my own global object, I am considering to make each class its own AMD module, based on James Burke's suggestion:

The issue is that before, there was no declare-time dependency between Employee and Company: you could put the declaration in whatever order you wanted, but now, using RequireJS, this introduces a dependency, which is here (intentionally) circular, so the above code fails. Of course, in addEmployee(), adding a first line var Employee = require("Employee"); would make it work, but I see this solution as inferior to not using RequireJS/AMD as it requires me, the developer, to be aware of this newly created circular dependency and do something about it.

Is there a better way to solve this problem with RequireJS/AMD, or am I using RequireJS/AMD for something it was not designed for?