[英]browserify two separate bundles pass variable from second file
main.js
level.js
num3.js
num4.js
main.js looks like below main.js 如下所示
require('./level');
console.log(num3);
level.js looks like below level.js 如下所示
var num3 = require('./num3');
var num4 = require('./num4');
bundled files捆绑文件
browserify --require ./level.js:level.js > bundle-level.js
browserify --exclude level.js main.js > bundle-main.js
I'm unable to get num3
//Uncaught ReferenceError: num3 is not defined
variable which required from ./num3
also num4
, if I change var num3 = require('./num3');
我无法获得
num3
//Uncaught ReferenceError: num3 is not defined
variable which required from ./num3
num4
,如果我改变var num3 = require('./num3');
to global variable window.num3 = require('./num3');
到全局变量
window.num3 = require('./num3');
is fine to get values.获取值很好。
Is there a proper way to have variables num3 and num4 passed through?是否有正确的方法让变量 num3 和 num4 通过?
First, I think there is an issue with the require
in main.js
.首先,我认为
main.js
的require
存在问题。
If main.js
has this require
:如果
main.js
有这个require
:
require('./level');
Browserify will be including level.js
in the main bundle. Browserify 将在主包中包含
level.js
。 The reason is that the name that follows the :
in this command:原因是该名称后面的
:
在下面的命令:
browserify --require ./level.js:level.js > bundle-level.js
is the name that's used for the module.是用于模块的名称。 And in this command:
在这个命令中:
browserify --exclude level.js main.js > bundle-main.js
you are telling Browserify that when it sees require('level.js')
it should not bundle anything, because the require
will be resolved at runtime with a between-bundle require
.你告诉 Browserify 当它看到
require('level.js')
它不应该捆绑任何东西,因为require
将在运行时用一个包间require
来解决。
You should use a non-relative name in the require
(and, if its a normal JavaScript file, leave off the .js
, too):你应该在
require
使用非相对名称(并且,如果它是一个普通的 JavaScript 文件,也不要使用.js
):
browserify --require ./level.js:level > bundle-level.js
browserify --exclude level main.js > bundle-main.js
Then the require
in main.js
should be:然后
require
在main.js
应该是:
const level = require('level');
If you want to export num3
and num4
, you can do so in level.js
like this:如果你想导出
num3
和num4
,你可以在level.js
这样做:
exports.num3 = require('./num3');
exports.num4 = require('./num4');
And in main.js
you would then have:在
main.js
您将拥有:
const level = require('level');
console.log(level.num3);
console.log(level.num4);
If you are interested in Node's module resolution mechanism (which Browserify emulates), it's described here .如果您对 Node 的模块解析机制(Browserify 模拟的)感兴趣,请参阅此处。 The
--require
and --exclude
Browserify options basically subvert that mechanism and instruct Browserify to resolve between bundles at runtime instead. --require
和--exclude
Browserify 选项基本上颠覆了该机制,并指示 Browserify 在运行时在包之间进行解析。
Also, if you want, you can specify multiple modules for require
-ing between bundles:此外,如果需要,您可以为包之间的
require
指定多个模块:
browserify \
--require ./num3.js:num3 \
--require ./num4.js:num4 \
--require ./level.js:level > bundle-level.js
browserify \
--exclude num3 \
--exclude num4 \
--exclude level main.js > bundle-main.js
And in main.js
:在
main.js
:
const level = require('level');
const num3 = require('num3');
const num4 = require('num4');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.