像PHP's include一样加载Javascript


Load Javascript like PHP's include

今天我要求的东西,我不敢相信在网上找到。

我试图使一个javascript函数,它允许我给一个文件名/路径名作为参数和函数返回javascript代码将立即执行/初始化-就像PHP的包括或要求。

现在我尝试了几种技术来实现我的方法,但我只是没有击中正确的位置,所以我可能会问:它甚至可能在JS中做到这一点吗?

Thanks in advance

有许多库和标准就是为了这个目的而存在的。在Node.js中,有一个内置的CommonJS实现。如果要从文件导出一段代码,或者导出文件的整个内容,可以将其附加到module.exports或简单地将其附加到exports对象。然后,您可以使用require('./path/to/file');在单独的代码段中要求它。

一些库尝试借用这种方法并在客户端实现它,browserify就是其中之一。

然而,你最好看看最好的客户端库:RequireJS

RequireJS实现了所谓的异步模块定义模式,该模式将所有的项目依赖项加载到一个顶级文件中。它允许您访问两个函数,require()define(),它们接受许多参数。第一个函数只需要依赖项,而第二个函数定义了一个模块,并命名了模块的依赖项,如下所示:

顶层文件,没有定义模块,只使用它们:

require(['jquery', 'underscore', 'backbone'], // dependencies
  function($, _, Backbone) { // dependencies are passed into callback
    $('div').append('Test'); // dependencies are available to this file
  }
);

模块:

define(['jquery', 'underscore', 'backbone'], // this module's dependencies
  function($, _, Backbone) { // dependencies are made available
    var MyModule = {};
    return MyModule; // this return statement essentially defines the module
  }
);

这种方法的好处是,通过拥有一个顶层文件和几个模块,这些模块都定义了它们自己的依赖项,你只需要引用一个模块,如果它实际上是该文件的依赖项,那么你的顶层内容总是整洁而整洁的,通常只包含一个初始化函数。

RequireJS还附带了一个名为R.js的优化器,它可以使用UglifyJS或Google的闭包编译器以正确的顺序缩小和连接你的脚本。