【问题标题】:Changing the default namespace 'Module' in emscripten在 emscripten 中更改默认命名空间“模块”
【发布时间】:2015-07-21 01:39:40
【问题描述】:

我正在使用 emscripten 为一些库提供 Javascript 绑定。 Emsripten 将代码打包到名为“Module”的命名空间(全局变量)中。

我想更改命名,以便我可以使用一个反映库用途的名称,并在我为其他库编写绑定时进一步防止变量名冲突。

我在文档中找不到任何地方,它显示了如何做到这一点。有谁知道如何更改 emscripten 使用的默认命名空间?

【问题讨论】:

    标签: javascript emscripten


    【解决方案1】:

    您可以更改 EXPORT_NAME 的默认设置,而不是默认的 Module。您可以在命令行上执行此操作,作为emcc 的选项:

    emcc -s EXPORT_NAME="'MyEmscriptenModule'" <other options...>
    

    然后该模块将以您指定的任何名称在全局范围内可用:

    window.MyEmscriptenModule == {...}
    

    请注意,如果您将 MODULARIZE 设置为 1,那么任何设置为 EXPORT_NAME 的内容都将创建为全局范围内的函数,您必须调用该函数来初始化模块。您可以将设置对象传递给此函数,它会返回模块实例:

    var myModuleInstance = window.MyEmscriptenModule({noInitialRun: true});
    

    如果您正在使用一些模块加载器,例如 RequireJS,并且根本不想向全局命名空间添加任何内容,则另一种方法是使用 --pre-js &lt;file&gt;--post-js &lt;file&gt; 选项来包装 final Javascript,如this answer to a question on Emscripten with module loaders

    【讨论】:

    • +1 用于链接回文档中的相关部分。我不知道为什么我错过了第一轮。自我提醒:RTFM 小心
    • 当我使用EXPORT_NAME=Lib 时,我总是会收到一个错误,例如:NameError: name 'Lib' is not defined。除了设置此选项之外,我还需要做些什么吗?
    • 哦,我实际上需要EXPORT_NAME="'Lib'",额外的单引号很重要!
    • 还想指出noInitialRun的意思是不立即运行main,并不意味着不运行run,这是Emscripten的程序启动初始化。
    • 对我来说,EXPORT_NAME 仅在我使用 MODULARIZE 或 MODULARIZE_INSTANCE 时才有效。
    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多