Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 封装requireJS及其模块_Javascript_Requirejs - Fatal编程技术网

Javascript 封装requireJS及其模块

Javascript 封装requireJS及其模块,javascript,requirejs,Javascript,Requirejs,我想使用像requireJS这样的东西来模块化我的javascript应用程序,但是,有一个我想满足的特殊需求,我还没有弄清楚: 我很高兴在全局空间中有require和define,但是,我不希望使用require导入的模块可以全局访问,也就是说,它们应该可以访问我的应用程序,但不能访问同一页面上运行的其他应用程序 在我看来,如果我调用define'moduleA',函数{…};然后,我可以通过require函数全局访问该模块。它可能没有占据全局空间本身的变量,或者没有连接到窗口,但感觉还是很糟

我想使用像requireJS这样的东西来模块化我的javascript应用程序,但是,有一个我想满足的特殊需求,我还没有弄清楚:

我很高兴在全局空间中有require和define,但是,我不希望使用require导入的模块可以全局访问,也就是说,它们应该可以访问我的应用程序,但不能访问同一页面上运行的其他应用程序

在我看来,如果我调用define'moduleA',函数{…};然后,我可以通过require函数全局访问该模块。它可能没有占据全局空间本身的变量,或者没有连接到窗口,但感觉还是很糟糕,因为其他应用程序确实不能看到我的内部模块,更不用说潜在的命名冲突等等,我可以使用上下文来规避吗

这似乎是对我的模块命名的倒退,在构建时将它们全部包含在一个大型私有化功能中

我可以拥有自己的require私有版本,但我的模块位于不同的文件中,无法访问define


是我错过了什么,还是我不得不忍受?或者,运行一个优化器将所有内容烘焙到一个文件中——感觉我可以为我的模块命名名称空间,如果我这样做的话,根本不必为requireJS操心。

在r.js build config add wrap:true中,您将不再使用require或define函数污染glabal范围

编辑:

您还可以根据需要指定名称空间,并在r.js构建配置中使用名称空间设置进行定义。你可以。从评论中:

// Allows namespacing requirejs, require and define calls to a new name.
// This allows stronger assurances of getting a module space that will
// not interfere with others using a define/require AMD-based module
// system. The example below will rename define() calls to foo.define().
// See http://requirejs.org/docs/faq-advanced.html#rename for a more
// complete example.
namespace: 'foo',

包装require/define很容易,但是当从其他文件加载时,我的模块无法看到它们。