requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件
Posted
技术标签:
【中文标题】requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件【英文标题】:requirejs - combine several files to single js file that not dependent on requirejs 【发布时间】:2013-03-21 10:34:16 【问题描述】:我正在编写包含大量代码的 jQuery 插件。因此,我决定分离代码并使其对我(开发人员)更加模块化。为此,我使用 require.js。 现在我有 6 个 js 文件:
-
utils.js
base-row.jas
a-row.js
b-row.js
my-table.js
main.js
文件 1 到 5 定义了 javascript “类”,它们之间有依赖关系。操作所有音乐会的“主要”类是 my-table.js。 main.js 仅依赖于 my-table.js 并从中创建一个插件:
require([
'my-table'
], function(MyTable)
jQuery.fn.myTable = function(options)
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
;
);
现在我想从这些文件创建一个包含所有 6 个文件的大 js 文件,没有任何依赖关系(用户应该引用它的 jQuery 除外)。为此,我使用了 r.js (http://requirejs.org/docs/optimization.html),结果我得到了一个依赖于 require.js 的大 js 文件(并且包含对定义和要求的调用)。我遵循了这个:http://requirejs.org/docs/faq-optimization.html#wrap 并使用 almond.js 来组合我的所有文件以供不依赖于 require.js 的使用。这工作正常。 问题是为什么我需要所有的 define 和 require 方法调用和 almond.js?为什么优化器不能像这样只连接函数结果(如本问题所述:Why do concatenated RequireJS AMD modules need a loader?):
(function()
var utils = «function()
....
return Utils;
»();
var baseRow = «function(A)
....
return BaseRow;
»(utils);
....
....
var myTable = .....
//<--This is require call and therefore doesn't return a thing
(function(MyTable)
jQuery.fn.myTable = function(options)
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
;
)(myTable);
)();
作为这个过程的结果,我决定检查并手动将所有文件合并到一个缩小文件中。我最终得到一个比杏仁版本小 3k 的文件! 我没有找到 r.js 优化器创建 require.js 依赖结果背后的逻辑。就我而言,没有人需要使用任何文件,我的主 js 文件是唯一的消费者。你怎么看?
【问题讨论】:
【参考方案1】:您可以只在文件中包含所需的文件。您可以通过 getScript 调用来做到这一点。
$.getScript("my_lovely_script.js", function()
//whatever you want here.
);
【讨论】:
【参考方案2】:优化器中 findNestedDependencies 选项的默认值为“false”,这意味着即使在优化脚本之后,仍然可能存在嵌套的 require
或 define
调用需要一个模块加载器。外部依赖也需要加载器。
但是,我同意,如果 findNestedDependencies 设置为“true”并且项目中没有外部依赖项,那么优化器应该能够消除对加载器的需求。
【讨论】:
以上是关于requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 webpack 将多个节点 js 文件组合成一个包