Browserify 插入全局变量

Browserify insert global variable

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

我有一个 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)。

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 全局时,数据才会包含在包中。每个使用全局的模块都会收到自己的副本。

可以在包中注入一个额外的模块,这样就可以需要数据(并且包将只包含一个数据副本),但由于交互,这会更复杂在 module-deps 和文件系统之间。有关更多信息,您可以查看此 answer.