像PHP的包含加载Javascript

时间:2013-04-30 10:28:32

标签: php javascript module include require

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

我试图创建一个javascript函数,它允许我给出一个文件名/路径名作为参数,函数返回javascript代码,它将立即执行/初始化 - 就像PHP的include或require一样。

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

提前致谢

1 个答案:

答案 0 :(得分:2)

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

有些图书馆尝试借用这种方法并在客户端实现它,浏览器化就是其中之一。

但是,最好还是查看最好的客户端库: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的Closure Compiler以正确的顺序缩小和连接脚本。值得一试。