如何从字符串中请求动态生成的模块?

时间:2014-05-16 17:23:26

标签: javascript requirejs

我正在使用RequireJS在Web应用程序的前端加载文件。

在某些情况下,我希望RequireJS加载字符串而不是文件。如果将此字符串粘贴到实际的.js文件中,并且我通过RequireJS将此文件作为模块,那么我将获得一个JavaScript对象。例如,

var str = "define([], function () { return {a : 'b'}; });";

var result = require(str) // I don't know what would be the syntax for this.

我希望result拥有值{a : 'b'}

在我的实际应用程序中,str的值是从为我的应用程序提供服务的服务器获得的,并且是可变的。

我可以要求像上面所示的字符串吗?

2 个答案:

答案 0 :(得分:0)

您应该尝试使用Require.Js Text Plugin。它允许人们需要可以加载到JavaScript变量中的“纯文本”。

答案 1 :(得分:0)

没有办法完全你想要做什么,因为没有语法让RequireJS从包含模块代码的字符串加载模块。

然而,有一种方法可以得到相同的结果:

  1. 在您建议的系统中,服务器生成模块的代码,并立即发送给客户端。相反,服务器可以a)生成模块的代码,以及b)生成一个唯一的模块名称,该名称与为模块生成的代码相关联并发送给客户端。

  2. 客户端需要从服务器收到的模块名称。

  3. 服务器将模块的代码提供给客户端(就像客户端要求的任何其他模块一样)。