use*_*r10 3 requirejs backbone.js ember.js
我在这方面看到很多帖子和文章.其中一些是
开发模块化Backbonejs应用程序
TodoMVC与requireJS
Stack Overflow帖子与大多数upvotes
因此,模块化jquery,backbonejs和其他库没有问题.我的问题是我为什么要这样做?因为在每个js文件中我们将使用jquery和backbonejs并在每个文件上添加以下代码对我来说似乎是额外的负担.
define([
'jquery',
'underscore',
'backbone',
'myFile1', 'myFile1'
], function ($, _, Backbone, module1, module2) {
Run Code Online (Sandbox Code Playgroud)
为什么我不应该在包含requireJS之前将它们直接包含在html文件中?
<script src="../lib/client/jquery.js"></script>
<script src="../lib/client/underscore.js"></script>
<script src="../lib/client/backbone.js"></script>
<script data-main="client/main" src="../lib/client/require.js"></script>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我不需要在每个js文件上定义jquery或backbonejs.我可以单独模块化我自己的js文件,如下所示.
define([
'myFile1', 'myFile1'
], function (module1, module2) {
Run Code Online (Sandbox Code Playgroud)
这种方法有什么缺点?这是正确的方法吗?我打破了任何requirejs规则吗?
因为jQuery和Backbone之类的模块在RequireJS模型中不起作用,所以我们不会这样做.没有define(语句定义它们所以它们必须被填充以便直接与真正的需求模块一起工作.
是的,你所说的(只是将它们转储到全局命名空间中)起作用,你不会违反任何"规则".当你添加一个脚本标签时,它所做的就是将代码转储到全局命名空间中 - 所以你的所有模块实际上都可以在上面的例子中访问Backbone和jQuery.
但它有三个缺点:
我们通过Require获得的一件事是我们的依赖是显式的,每次模块需要我们知道的东西 - 所以我们的依赖管理更清楚(我们知道哪些模块依赖于jQuery而不是例如 - 所以我们知道在没有jQuery的新项目中哪些是安全的.
另一件事是我们在代码中保持一致,我们继续以完全相同的方式声明每个依赖关系并以完全相同的方式使用它.RequireJS shims让我们继续表现得像jQuery或Backbone这样的库.
由于隐式依赖,如果你想重用你的代码 - 包括jQuery 之后你的RequireJS模块将是一个运行时错误,这并不总是很容易理解,不像Require会告诉你它无法加载模块jQuery (并没有定义像$这样的东西,甚至更糟的是"[对象]不是一个函数"或类似的东西.
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |