【问题标题】:Browserify insert global variableBrowserify插入全局变量
【发布时间】:2017-03-03 14:11:54
【问题描述】:

尽管有很多相关问题,但他们没有回答如何解决以下问题。

我有一个 nodejs 文件 index.js。

var browserify = require('browserify');

var data = getSomeData();
browserify('entry.js').bundle();

我希望 data 可以在 entry.js 中访问。我找到了 browserify 选项 insertGlobalVars 但我找不到任何合适的文档或示例。我试过{insertGlobalVars: {myVar: someData}},但它不起作用。

我无法调用require('someData'),因为我的数据仅在执行index.js 时产生。

更新: 数据是一个数组; key 是文件名,value - 文件内容(大小约为 500b)。

【问题讨论】:

  • 什么样的数据?它可以转换为 JSON 吗?它有多大?
  • @cartant 我更新了问题

标签: browserify


【解决方案1】:

insertGlobalVars 选项采用object that contains functions(使用filebasedir 参数调用)。因此,您必须像这样指定 insertGlobalVars 选项:

var browserify = require('browserify');
var someData = getSomeData();

browserify('entry.js', {
    insertGlobalVars: {
        someData: function () { return JSON.stringify(someData); }
    }
})
.bundle()
.pipe(process.stdout);

请注意,只有在代码中实际使用了someData 全局变量时,数据才会包含在包中。每个使用全局的模块都会收到自己的副本。

可以将一个额外的模块注入到包中,以便需要数据(并且包将只包含数据的单个副本),但是由于@之间的交互,这将更加复杂987654329@ 和文件系统。如需更多信息,您可以查看此answer

【讨论】:

  • 答案是可以接受的。但我真正需要的是正确的 browserify 文档。如果它存在,我没有问过这个问题。我尝试浏览了一个源代码,但是太耦合了,我什么都没看懂。
  • 对此答案的简要说明:您只需在代码中引用 someData 全局。你不需要做任何特别的事情。所以在entry.js中,你可以添加:console.log(someData),它会运行良好。