Answer:
你应该使用exclude
.
解释:
这两个函数都会阻止文件包含在捆绑包中。对于您的用例,您可能不会require
jQuery,所以使用哪个并不重要。然而,事情是这样的:
browserify 使用模块依赖 https://www.npmjs.com/package/module-deps探索您的代码并找到任何require
语句,然后告诉 module-deps 在哪里可以找到所需的模块。
如果该文件位于捆绑包中,则只需在捆绑包的模块映射中提供该文件的密钥即可。
如果你说文件是external
, browserify 假设您的意思是它包含在另一个包中,因此提供了文件的路径,假设该文件作为 id 将从另一个包中解析。为了做到这一点,需要一些额外的簿记工作。
If you exclude
文件,然后 browserify 将提供undefined
到 module-deps ,当您尝试使用需要该文件的包时肯定会发生火灾。然而,这种方法缺乏跟踪文件路径的开销(这实际上可以忽略不计),并且不会在爆炸之前“浪费时间”查找其他包。
一些例子:我摆弄了 node-browserify/example/api 来生成一些包,下面的示例是来自各种测试的模块映射,为了便于阅读而进行了某种格式化。
Vanilla - 像在 browserify 存储库中一样运行:
{
1: [function(require, module, exports) {
module.exports = function(n) {
return n * 3 };
}, {}],
2: [function(require, module, exports) {
var bar = require('./bar');
module.exports = function(n) {
return n * bar(n);
};
}, { "./bar": 1 }],
3: [function(require, module, exports) {
var foo = require('./foo');
console.log(foo(5));
}, { "./foo": 2 }]
}
3
(main.js) 取决于./foo
这是在2
2
(foo.js) 取决于./bar
这是在1
1
(bar.js) 没有依赖项
Marked api/bar.js
作为外部:
{
1: [function(require, module, exports) {
var bar = require('./bar');
module.exports = function(n) {
return n * bar(n);
};
}, { "./bar": "/browser/bar.js" }],
2: [function(require, module, exports) {
var foo = require('./foo');
console.log(foo(5));
}, { "./foo": 1 }]
}
2
(main.js) 取决于./foo
这是在1
1
(foo.js) 取决于./bar
应该标记哪些/browser/bar.js
在其他捆绑包中
Marked api/bar.js
排除:
{
1: [function(require, module, exports) {
var bar = require('./bar');
module.exports = function(n) {
return n * bar(n);
};
}, { "./bar": undefined }],
2: [function(require, module, exports) {
var foo = require('./foo');
console.log(foo(5));
}, { "./foo": 1 }]
}
2
(main.js) 取决于./foo
这是在1
1
(foo.js) 取决于./bar
这是在 ZOMFG!我不知道它在哪里。你需要吗??!1!
删除了排除/外部调用,并删除了要求./bar
from foo.js
:
{
1: [function(require, module, exports) {
module.exports = function(n) {
return n * bar(n);
};
}, {}],
2: [function(require, module, exports) {
var foo = require('./foo');
console.log(foo(5));
}, { "./foo": 1 }]
}
2
(main.js) 取决于./foo
这是在1
1
(foo.js) 没有依赖项,世界是美好的。我想知道他们是否加载了bar
通过其他一些方式