如何将requireJS函数保留在全局命名空间之外?

Mat*_*t S 4 javascript requirejs

我正在使用requireJS编写第三方JS应用程序,我希望保持全局命名空间清除除了将由我的应用程序创建的单个全局接口对象之外的所有内容.除了requireJS之外,我没有遇到任何问题.

作为优化器的一个选项,可以将require.js滚动到构建中,并且可以定义名称空间,使优化器作用域的所有引用都需要函数到该名称空间.

例如.require(...)成为my_scope.require(...)

问题是这个全局命名空间对象在应用程序中创建之前不会存在.优化器确保requireJS在它加载的任何代码之前加载和执行,因此当需要执行require函数时(如require或define),抛出异常(未定义名称空间对象).

有没有人成功地实现了这一点,而无需手动更改构建的脚本或在构建的脚本之前和之前运行另一个脚本?换句话说,有没有一种正确的方法来实现这一目标?

Mat*_*t S 6

对于那些一直在寻找这个问题的答案的人来说,就是在一堆用过的肘部油脂中找到的.

在构建配置选项中,忘记使用namespace.有一个属性"wrap",允许您将整个构建脚本包装在您选择的代码中.

只需将其定义为以下内容即可创建围绕所有内容的本地范围(包括requireJS函数):

require.config({
    wrap: {
        start: "(function() {",
        end: "}());"
    }
})
Run Code Online (Sandbox Code Playgroud)