今天我要的东西,我不敢相信在网上找到。
我正在尝试制作一个 javascript 函数,它允许我提供文件名/路径名作为参数,并且该函数返回将立即执行/初始化的 javascript 代码 - 就像 PHP 的 include 或 require 一样。
现在我尝试了几种技术来实现我的方法,但我只是没有找到正确的位置,所以我可能会问:甚至可以在 JS 中做到这一点吗?
提前致谢
今天我要的东西,我不敢相信在网上找到。
我正在尝试制作一个 javascript 函数,它允许我提供文件名/路径名作为参数,并且该函数返回将立即执行/初始化的 javascript 代码 - 就像 PHP 的 include 或 require 一样。
现在我尝试了几种技术来实现我的方法,但我只是没有找到正确的位置,所以我可能会问:甚至可以在 JS 中做到这一点吗?
提前致谢
有许多库和标准仅仅是为了这个目的而存在的。在 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 的 Closure Compiler 以正确的顺序缩小和连接您的脚本。值得一试。