问题标签 [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 投票
0 回答
229 浏览

javascript - 使用 RequireJS 优化器的后备路径

我的目标是拥有一个依赖项 foo,从 CDN 加载本地回退,并使用 RequireJS 优化器 (r.js) 捆绑和缩小其他所有内容。

require(['foo'], function (foo) { /*...*/ })调用应该在没有errbacks的情况下工作- 至少不是在所有依赖 foo 的地方,如果可能的话,我很乐意在共享位置定义一个 errback,但全局onError似乎不能以这种方式使用。

没有 r.js 的配置:

gulpfile 中的优化调用:

将 foo 的路径更改为数组(而不是单个字符串)后的输出:

错误:优化器不支持路径回退。

我已经尝试按照建议提供路径作为优化调用的替代但没有成功:

这对我来说听起来像是一个基本要求,我不能为使用 RequireJS 及其优化器的模块指定后备路径吗?

0 投票
1 回答
233 浏览

jquery - r.js 导致:将 ./lib/jquery.js 评估为模块“jquery”失败并出现错误:TypeError:无法读取未定义的属性“createElement”

我正在尝试在使用 jQuery 的代码上使用 r.js。但是在评估 jQuery 时它失败了。

这是我收到的错误消息:

$ r.js init-edx-machine.js /usr/local/lib/node_modules/requirejs/bin/r.js:393 抛出错误;^

错误:将 ./lib/jquery.js 评估为模块“jquery”失败并出现错误:TypeError: Cannot read property 'createElement' of undefined at Function.req.load (/usr/local/lib/node_modules/requirejs/bin/r .js:2571:23) 在 Object.load (/usr/local/lib/node_modules/requirejs/bin/r.js:1935:21) 在 Module.load (/usr/local/lib/node_modules/requirejs/bin /r.js:1084:29) 在 Module.fetch (/usr/local/lib/node_modules/requirejs/bin/r.js:1074:66) 在 Module.check (/usr/local/lib/node_modules/requirejs /bin/r.js:1106:30) 在 Module.enable (/usr/local/lib/node_modules/requirejs/bin/r.js:1426:22) 在 Object.enable (/usr/local/lib/node_modules /requirejs/bin/r.js:1807:39)在模块。(/usr/local/lib/node_modules/requirejs/bin/r.js:1411:33)在 /usr/local/lib/node_modules/requirejs/bin/r.js:384:

我在 jquery.js 中搜索了“createElement”。大多数时候它使用文档。有时它使用通过参数给出的变量。

jQuery 版本是 2.1.4。我检查了较新的版本,他们也这样做。

我真的不知道这里发生了什么。我现在能做什么?

0 投票
0 回答
455 浏览

javascript - 组织打字稿定义以避免重复代码

现在的情况:

有一个类定义在:

lib/components/widgets/MyWidget.ts:

它被编译为 javascript,与其他文件捆绑在一起,作为lib-min.js 的结果

所以因为它在lib/components/widgets/MyWidget.ts我做了一个定义“集合”文件(mydefinition.d.ts),如:

通过这种方式,它可以像这样使用(当然在将lib-min.js 包含到页面中之后):

问题:

我认为很明显,保持这种重复是压倒性的,很容易导致错误。同样在升级到 typescript 2+(从 1.8.9 开始)后,我收到了几个“重复标识符”的编译错误,而且通常它不像以前那样工作。

  • 我可以制作一个像 IMyWidget 这样的接口并将其公开,但随后缺少实现并且无法使用 new 创建
  • 我可以从mydefinition.d.ts中删除“声明模块...”,但是模块加载器将找不到模块(因为 r.js 优化器从它的路径中命名模块)

问题

是否有一种干净且“便宜”的方法来解决这个问题(并尽可能避免代码重复)?

0 投票
1 回答
1146 浏览

javascript - RequireJS 捆绑配置与捆绑模块

  1. requirejs 捆绑配置和模块优化(即多个模块)有什么区别?在我看来,两者都产生了相同的东西——而不是创建一个优化的文件,而是创建多个优化的文件,每个文件都有多个模块。我的理解正确吗?与模块捆绑相比,使用捆绑包有什么优势吗?

  2. 当使用 r.js 'modules' 进行优化时,可以提供一个 'create: true' 配置,如果模块名称不是现有模块,它会创建一个文件。但是,我没有看到其他使用“create:true”引用该模块的模块相应地发生了变化。

    "modules": [{ "name": "some/existing/Module" }, { "name": "some/non/existing/path", "create": true, "include": ["x", "y"] }]

    在上述情况下"some/non/existing/path.js" ,r.js 生成的 JS 文件是如何加载到浏览器中的呢?

0 投票
0 回答
393 浏览

javascript - requireJS 优化器 - 将两个匿名模块组合成一个 combine.js 文件

我正在尝试使用RequireJS 优化器将两个 require amd 模块组合成一个 combine.js javascript 文件。

**此问题与此问题不同:Mismatched anonymous define() module where there is not a solution or detail of the questions,并且与reactJS文档有一些矛盾的建议。

模块1.js

模块2.js

推荐的良好做法

在 requireJS wiki 和其他来源中,作为一种好的做法,他们明确建议不要为每个模块设置名称,而是将其保持匿名,没有 id: https ://github.com/requirejs/requirejs/wiki/Updating-existing -图书馆#anon

通常你不应该注册一个命名模块,而是注册为一个匿名模块......

RequireJS 优化器 - 将模块组合在一个 js 文件中

[构建.js]

[定义.js]

[弹出 requireJS 优化器]

RequireJS 优化器 - 输出 - combine.js

尝试加载 combine.js 文件和模块

[索引.html]

问题

加载combined.js 文件时,我总是得到相同的错误,除非我使用代码为上面的每个模块指定一个ID 名称:define('module1', factory); ...

错误:

附加信息

  • 当前,所有文件都使用具有该 UMD 模式的 requireJS 完美加载。但是我不知道是否应该更改某些内容。
  • definition.js 和 combined.js 显式加载模块,每个模块都有定义的id 名称。问题可能就在这里。

问题

  1. 如何将这些匿名模块组合到一个 combine.js 文件中,使用 requireJS 加载该文件,然后获取模块?
  2. 代码中可能有问题吗?
  3. 在 requireJS Optimizer 文档中,他们说他们支持加载匿名模块,但我一直无法做到。是否真的可以在不为模块分配 id 名称的情况下做到这一点?

我完全绝望地试图解决它,并且已经查看了许多资源,但找不到明确的答案。非常感谢

0 投票
1 回答
161 浏览

javascript - 使用 Gulp 和 r.js 通过 javascript 应用程序构建有什么区别?

我想知道除了连接和缩小我的 javascript 文件之外, RequireJS 的优化器 ( r.js ) 是否还有更多功能。

例如,我可以使用 Gulp 来缩小和连接我的文件吗?
他们的结果会一样吗?

谢谢

0 投票
1 回答
403 浏览

requirejs - RequireJS:相对于数据主文件加载模块

我正在使用 RequireJS 加载一些模块。

我正在使用镜像 CDN 提供静态资产。问题是模块是相对于网站域而不是数据主文件加载的,因此模块是以这种方式加载的:

有没有办法相对于数据主文件加载模块,以便使用 CDN 为模块提供服务?

我不能在任何地方对 CDN 域进行硬编码,因为它并不总是相同的。


这是一个样本require-main.js

这是rjs.optimize我用来缩小所有资产并组合一些模块的功能

0 投票
2 回答
2823 浏览

gulp - RequireJS:丑化不起作用

我一定在某处犯了错误,但在优化期间它没有被写入标准输出。我正在尝试通过 requirejs 优化文件,但输出没有被缩小。根据文档,UglifyJS 应该缩小代码。

无论如何,下面的代码是微不足道的,但它隔离了问题。

src/index.js:

src/myMod.js:

src/config.js:

这是执行优化的 gulp 任务:

运行任务后, dist/src/index.js 包含所有其他模块。但是,它没有被缩小,并且没有一个变量被重命名。相反,就好像文件只是连接在一起,仅此而已。有人可以告诉我(1)为什么它没有被缩小?(2) UglifyJS 是否抛出错误?如果是这样,有没有办法在运行 gulp 任务时看到它?

编辑这是 RequireJS 文档的链接,其中讨论了在节点中使用优化器,这是在上面提到的 gulp 任务中完成的。它位于“将优化器用作节点模块”下的底部。

http://requirejs.org/docs/node.html

0 投票
1 回答
421 浏览

javascript - 需要 js 优化器缩小我的项目但不连接到捆绑文件中

我不清楚如何将许多 js 文件捆绑到一个文件中。当我运行优化器时,结果是一个输出目录,其结构反映了我的源目录。里面的所有文件都被缩小了。那挺好的。但我正在寻找的是一个缩小的文件。我不这么认为。所以我的项目是优化的,但没有串联。

我一定对如何配置流程有误解。这就是我正在做的事情:

我在一个目录中有 r.js 和 build.js。在该目录下的一个文件夹中,我有 sourcejs。该 sourcejs 文件夹具有 application.js (我希望优化器跟踪的模块)。该模块“需要”它下面的嵌套文件夹中的很多东西。

这是构建文件:

我假设将优化器指向主模块 application.js 将是从那里产生所需输出所必需的。它将跟踪其中的依赖关系并找到通往所有子文件夹和文件的路径。优化器似乎确实找到了所有来源。我得到输出:

输出文件 application.js 不是项目的串联版本,而只是其自身的缩小版本。

我在这里有什么误解?

0 投票
1 回答
903 浏览

javascript - RequireJS 动态加载模块而不导入所有模块

我试图动态导入一个模块。选择的模块应该取决于一些条件(在这个例子中我使用了随机模式)。

需要-conf.js

测试/chart.js

测试/chart2.js

选项1

此选项有效,但必须导入两个脚本。所以,这不是最优的。

输出:Chart() 或 Chart2()

选项 2

此选项是异步的。在加载模块之前打印对象。

输出:空

选项 3

此选项会产生加载错误。

输出:错误

请帮助我以正确的方式动态加载模块。