首页 > 解决方案 > 无法访问捆绑到同一个 Browserify 包中的模块之间的功能?

问题描述

前言:我已经阅读了几篇关于尝试从不在包中的代码访问 Browserify 包中的代码的 SO帖子。我不想那样做。我无法访问捆绑到同一个包中的模块之间的代码。

我使用 Browserify 将 Node.JS v.8.11.1 项目中的两个 Javascript 文件捆绑到一个独立的包中:

browserify solidity-helpers-misc.js create-game-page-support.js --standalone browserified  > bundle.js

不幸的是,来自create-game-page-support.js文件的代码无法访问来自solidity-helpers-misc.js文件的代码。任何此类引用都是未定义的。我检查了browserifiedChrome 调试器中的命名空间并定义了它,但仅使用了基本的 Javascript 对象函数集,例如:toString() 等,仅此而已。

例如,此代码位于bundle.js中,来自solidity -helpers-misc.js文件:

function getNonceViaUuid(){
    return uuidv4();
}

// Yes.  Export the code so it works with require().
module.exports =
    {
        getNonceViaUuid: getNonceViaUuid,
    };


}).call(this,require('_process'),"/../../../common/solidity-helpers-misc.js","/../../../common")

但是,当我尝试从来自create-game-page-support.js的bundle.js中的此代码访问getNonceViaUuid()函数时,如下代码片段所示:

$('#create-game-btn').click(
    function(e)
    {
        console.log("Testing access to browserified file.  Remember to add sourcemap later.");

        var nonce = getNonceViaUuid();
        ...

调试器暂停并出现异常,抱怨getNonceViaUuidundefined。正如我所说,我在调试器中检查了浏览器化的命名空间,它没有附加getNonceViaUuid

注意,第一个文件solidity-helpers-misc.js是一个使用require()语句的服务器端文件。第二个文件create-game-page-support.js是一个客户端代码模块,我想访问第一个文件,但在客户端。这就是我尝试使用 Browserify 的原因,因此我可以在服务器和客户端上使用第一个文件中的代码。

如何跨在同一个 Browserify 包中捆绑在一起的模块访问功能?

标签: javascriptnode.jsbundlebrowserify

解决方案


问题是我不需要客户端模块 create-game-page-support.js中的服务器端模块solidity-helpers-misc.js模块。通过将以下内容添加到我的客户端模块的顶部:

var solidty_helpers_misc = require('../../../common/solidity-helpers-misc');

然后使用该模块为getNonceViaUuid()调用添加前缀:

ar nonce = solidty_helpers_misc.getNonceViaUuid();

然后它起作用了。回想起来,在客户端使用require()的“外星人”感觉最初是让我感到困惑的地方。


推荐阅读