为什么在Backbone/Require.js项目中的每个JS文件中都包含jQuery和下划线

Loc*_*lan 6 javascript jquery requirejs backbone.js underscore.js

在几乎每个Backbone/Require.js项目中,您都会看到与此类似的模型和视图:

define([
    'jquery',
    'underscore',
    'backbone'
], function ($, _, Backbone) {
    //Some code goes here, perhaps a Backbone model or view
});
Run Code Online (Sandbox Code Playgroud)

但是,假设您正确设置了Require.js垫片(Backbone垫片包含类似的东西deps: ["underscore", "jquery"]),您只需要定义Backbone - 定义Backbone作为依赖关系隐式地将jQuery和Underscore定义为依赖关系!因此这也是正确的:

define([
    'backbone'
], function (Backbone) {
    //Some code goes here, perhaps a Backbone model or view
});
Run Code Online (Sandbox Code Playgroud)

就个人而言,我会在一个明确使用其功能的文件中定义jQuery或Underscore - 但是在一个简单的简洁的Backbone模型文件中,它们看起来像是残酷的.

为什么我经常看到多余的jQuery和Underscore定义的模式?为什么这成为一个毫无疑问的最佳实践?

nik*_*shr 3

当您没有明确需要将 Underscore 和 jQuery 作为模块中的变量时,将它们声明为依赖项没有任何作用(即,这不是最佳实践)。正如你在问题中所说

就我个人而言,我会在一个明确使用其功能的文件中定义 jQuery 或 Underscore,但在类似简单的 Backbone 模型文件之类的文件中,它们看起来很糟糕。

此外,在某些情况下您甚至可以摆脱它们: