Browserify插入全局变量

Fre*_*man 6 browserify

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

我有一个nodejs文件index.js.

var browserify = require('browserify');

var data = getSomeData();
browserify('entry.js').bundle();
Run Code Online (Sandbox Code Playgroud)

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

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

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

car*_*ant 7

insertGlobalVars选项采用包含函数对象(使用filebasedir参数调用).所以你必须insertGlobalVars像这样指定你的选项:

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

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

请注意,如果someData全局实际在代码中使用,则数据将仅包含在包中.使用全局的每个模块都将收到自己的副本.

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