问题标签 [requirejs-optimizer]

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 回答
345 浏览

jquery - 使用 RequireJS 优化器 r.js 缩小后,Jquery 对象转换为普通变量

我在 CoffeeScript 中有这个功能

$elements 是一个 jQuery 变量,它使用如下数组:

当我使用 RequireJS 优化器时r.js,它使用Uglify生成的缩小代码.. 看起来像这样:

在之前的缩小代码中,$el变成t.. 所以这拒绝$el在生产中执行 as jQuery 元素。

这是问题,但我不知道为什么会这样。谁能解释一下为什么会发生这种情况,谢谢。

更新:缩小的代码不是问题,而是在数组中的节点正确加载之前执行的脚本,但是我在文档准备好之后调用该函数,这意味着 DOM 必须完全加载。

提示:我将脚本标签放在 中,当代码没有被缩小时,这可以正常工作。

0 投票
2 回答
653 浏览

javascript - RequireJS 使用地图配置优化多页应用

我试图通过将功能分解为共享许多通用代码的单独应用程序来模块化我现有的项目。这是一个 Backbone/Marionette 应用程序,在开发模式下一切正常,但我在优化工作时遇到了麻烦。我目前有两个页面,有 2 个主文件和 2 个应用程序文件。这main两个文件都包含几乎相同的 requirejs.config 块,除了第二个使用mapconfig 选项将app模块映射到loginApp. 这样做的原因是大多数其他模块依赖于该app模块来实现某些应用程序范围的功能,包括消息传递和一些全局状态变量。

主.js

主登录.js

在我优化之前,这很好用。我收到有关丢失文件的错误,但是在使用 requirejs 足够长的时间后,我知道这与问题无关。:)

从文档:

注意:使用地图配置进行构建时,需要将地图配置提供给优化器,并且构建输出仍必须包含设置地图配置的 requirejs 配置调用。优化器在构建期间不会进行 ID 重命名,因为项目中的某些依赖项引用可能依赖于运行时变量状态。因此,优化器不会在构建后使对地图配置的需求无效。

我的build.js文件如下所示:

如果可能的话,我想避免使用 2 个单独的构建文件,并且我正在努力将requirejs.config块分解为一个共享文件并让 2 个main文件加载然后加载app文件(这类似于多页示例有效)但我需要该地图配置在优化器中工作才能使其正常工作。有什么想法我在这里想念的吗?

更新

我已将配置拆分为它自己的文件,该文件config.js包含在main-*文件中。在main-login.js文件中,我在上面包含了地图配置,define并且一切都在开发模式下工作。

build.js文件与上述相同,除了第二个mainConfigFile被删除。但是,优化仍然失败。我认为正在发生的是,因为这是一个 Marionette 应用程序,通常的做法是将 Application 对象作为依赖项传递给应用程序的其他部分,包括视图、控制器和模型。当我优化时,我遇到了两个不同的问题。如果我离开removeCombinedas true,优化器将构建第一个应用程序的依赖项,然后删除这些文件,因此当它在第二个应用程序中看到它们时,它将失败,因为它再也找不到源文件。将此设置为false似乎合理,但问题是这会给我以下错误:

我找不到有关此特定错误的任何一致信息。它可能与hbs插件有关(类似于text但用于预编译 Handlebars 模板),但我不肯定是这种情况。由于没有堆栈跟踪,我不确定从哪里开始寻找。不过,我的直觉是它在某个地方是循环依赖。所以,我更新的问题是,应该如何解耦多页 Marionette 应用程序,以使共享代码(不仅仅是 3rd 方代码,还有数据模型和视图等自定义代码)成为可能?我是否需要删除对核心应用程序对象的任何依赖项?(这将需要大量的重构。)由于它在开发模式下工作得很好,r.js我忽略的配置是否有一些技巧?我'appexclude列表以及stubModules但似乎没有任何工作。我正在考虑只创建 2 个构建文件并完成它,但我真的很想知道如何以“正确”的方式解决这个问题。

0 投票
0 回答
231 浏览

playframework-2.3 - 播放 2.3 RjsKeys.mainModule 导致错误:优化器不支持路径回退

在 build.sbt 上,如果我将这些配置用于 rjs,

它给了我这个错误:[信息]错误:错误:优化器不支持路径回退。请为 Angular 提供构建配置路径覆盖

我必须将'build'作为 mainModule 来解决上述警告。这是正确的解决方法吗?

0 投票
1 回答
145 浏览

javascript - 在 gruntjs 中使用 requirejs 构建一个库,在其他项目中使用

我正在构建一个库,它是一组包含模型视图控制器 Javascript 文件的文件夹。
每个文件都有使用 require 语法声明的依赖项:

我正在使用具有出色“grunt-contrib-requirejs”的 GruntJS 编译这个库。
问题是,作为一个库,没有入口点,也没有主入口。
我希望用户能够在需要时通过调用每个模块来使用它。

以下是我的问题:

首先:
如何为包含所有模块的库构建一个 javascript 文件而不一一声明它们?

其次:
我以后如何在另一个项目中重用这个库?我试过这个:

但是当然第二行失败了,有没有类似的东西require(myLibrary.moduleAView)

你有什么建议?

更新:
我发现当你在一个文件上缩小所有模块时,你在一个页面上有多个定义,这被解释为 requirejs 的脚本,你必须加载它两次!(第一次是整个文件,第二次是你的主要文件)。然后我的“主要”或入口点是在最摇滚的答案上手动构建的(这仍然是一个问题)。所以我的第二个问题的解决方案是这篇文章:http:
//jaketrent.com/post/dynamically-require-optimized-modules-requirejs/

0 投票
0 回答
49 浏览

javascript - 需要优化器的谷歌地图问题

我正在使用 Requirejs 加载谷歌地图 API,它工作正常,但在使用 requirejs 优化器后,它会引发Uncaught ReferenceError: google is not defined.

这是我的代码

这是requirejs build.coffee

我已经阅读了几乎所有与我类似的问题,但没有人与我合作!

0 投票
2 回答
207 浏览

requirejs - 需要 js 垫片和 r.js 的问题

我在使用 r.js 时遇到了一些问题,希望有人能对此有所了解。

考虑以下垫片:

以及以下任意插件(注意:它们不需要是 jQuery 插件,但 2 必须依赖于 1)。

插件1:

插件2:

r.js 将构建以下内容:

太好了 - 一切都按正确的顺序排列。

但是,如果我需要设置

在构建配置中,我将其作为输出:

我不确定我是否误读了将 wrapShim 设置为 true 的意义,但这不应该编译为:

?

看起来 wrapShim 完全忽略了 shim 中设置的依赖项。

0 投票
1 回答
1342 浏览

requirejs - 如何在 Play 框架中使用 RequireJS 优化器?

正如所宣传的那样,rjs在 Play 中可以

确保从 WebJar 中引用的任何 JavaScript 资源都会自动从 jsdelivr CDN 中引用。此外,如果找到任何 .min.js 文件,则将使用该文件代替 .js。这里的一个额外好处是您的 html 不需要更改!

但是,我似乎无法让这些工作。

  1. 我尝试在生产模式下运行我的 Play 应用程序,我的所有 webjar javascripts 仍然被引用为本地。
  2. 我没有看到.min生产中使用的 javascript 文件的版本。
  3. 我无法让依赖注入在生产模式下工作。例如,当我想像这样注入jquery我的代码时

    define(['jquery'], function ($) { 'use strict'; console.log($.grep); return { sum: function (a, b) { return a + b; } }; });

我可以让它在开发模式下正常工作,但在生产模式下,rjs失败的说法

显然,尽管 Webjar 生成了配置设置,但它正在寻找 jQuery 的错误位置

有正确的位置jquery

我正在使用 Play 2.4.0,并pipelineStages := Seq(rjs, digest)在我的 build.sbt 中进行了设置。

请让我知道我在哪里弄错了。

谢谢!

0 投票
0 回答
125 浏览

javascript - RequireJS 优化器 - 只结合 require lib 和 main.js

我的 RequireJS 项目的构建步骤花费了太长时间(大约 14 秒)来组合我的所有模块并导出到单个文件。这意味着一边看我的文件一边进行开发变得非常乏味。我正在使用 node 模块进行编译,并且我已经尝试了RequireJS 优化页面上的所有提示(包括设置optimizenone),并且没有看到编译时间有任何显着差异。此时,我要做的就是将require lib、config和main.js启动文件结合起来,这样其他所有模块都可以通过网络请求加载。

我曾考虑过切换到 Browserify 或 Webpack,但我还没有找到任何真正的证据证明它们会是更快的解决方案。

编辑:我的构建配置如下:

0 投票
1 回答
208 浏览

javascript - requirejs 优化器只定义模块名称

我想使用 requirejs 优化器来为我的 js 文件创建/定义模块名称。

例如:如果我在 modules/moduleA 下有一个文件说 test.js

我希望 requirejs 优化器根据路径为我创建模块名称...例如,下面我希望 requirejs 优化器创建模块名称 modules/moduleA/test 并放入 test.js 中的定义中

例如:在运行 requireJS 优化器之前

test.js 内容:

运行 requirejs 优化器后

test.js 内容

稍后我将通过 grunt 来组合相关的依赖文件......但我希望 requirejs 优化器访问每个文件并根据它提供的路径给我模块名称。

这可行吗?

0 投票
2 回答
52 浏览

mysql - 优化查询,多表选择

我有一个连接四个表的 SQL 脚本。我正在使用许多AND操作。有什么解决方案如何优化这个脚本?