Javascript Browserify:如果需要,使用module.exports,否则公开全局
我正在考虑在我的一些项目中采用browserify,但是如果其他人想要使用(捆绑的)代码,我想确保他们不必使用browserify。显而易见的方法是通过Javascript Browserify:如果需要,使用module.exports,否则公开全局,javascript,browserify,Javascript,Browserify,我正在考虑在我的一些项目中采用browserify,但是如果其他人想要使用(捆绑的)代码,我想确保他们不必使用browserify。显而易见的方法是通过module.exports以及窗口公开模块导出。global。但是,对于那些需要编写脚本的人,我不希望污染全局名称空间 是否可以检测脚本是否正在required?如果是的话,我可以这样做: var mymodule = (function() { ... })(); if (isRequired()) { module.exports =
module.exports
以及窗口公开模块导出。
global。但是,对于那些需要
编写脚本的人,我不希望污染全局名称空间
是否可以检测脚本是否正在require
d?如果是的话,我可以这样做:
var mymodule = (function() { ... })();
if (isRequired()) {
module.exports = mymodule;
} else {
window.mymodule = mymodule;
}
请注意,无论发生什么情况,这都将预先绑定,因此var mymodule
不会公开全局变量。另外,目前我正在使用,但愿意切换到更适合browserify的版本
如果另一个库没有创建全局module.exports对象,您可以简单地检查module.exports是否存在,那么使模块既能
require
又能的最佳方法是什么
var mymodule = (function() { ... })();
if (module && module.exports) {
module.exports = mymodule;
} else {
window.mymodule = mymodule;
}
我正在处理同样的问题建立一个图书馆,这里是一个粗略的意见。我认为我们首先需要将图书馆的读者分成几个类别:
使用browserify和NPM的人
那些只需下载mylib.min.js并以某种方式使用的用户
AMD(与鲍尔?),可能是第三类
因此,对于1很容易,您将拥有一个您的index.js模块:
module.exports = function () { /* code */ }
您的package.json将有一个
“main”:“index.js”
请注意,我没有向index.js添加任何window.xx代码
对于2我认为最好的办法是创建一个standalone.js
var mylib = require('./index.js');
global.window.mylib = mylib;
这就是browserify应该构建的
对于3(如果您关心的话),您可以按如下方式调整standalone.js:
var mylib = require('./index.js');
if (typeof global.window.define == 'function' && global.window.define.amd) {
global.window.define('mylib', function () { return mylib; });
} else {
global.window.mylib = mylib;
}
《福布斯·林赛》有一篇很好的文章解释了如何进行独立构建:
对于短版本,请使用独立选项:
browserify beep.js --standalone beep-boop > bundle.js
为什么不用一个闭包将整个过程包装起来,然后作为参数传递exports
(function (exports) {
// code here
// ...
exports.foo = bar;
})(exports || this);
通过这种方式,它还将其导出到WebWorker范围和其他“无窗口”环境。浏览使模块
,模块。导出
和要求所有捆绑文件都可用。因此,仅凭我的捆绑就可以实现这些功能。感谢您的回复。链接使用了不推荐使用的代码。无法再将选项传递给bundle()。另外,link没有解释beep boop是从哪里来的,名称是否重要,以及在现实世界中用什么来替换它。我不确定术语是否正确,但本例中的“beep boop”是您希望包含独立函数的“名称空间”。因此,如果我使用browserify infle--standalone myspace--o outfile
浏览函数byteLength(…){…}
,我将通过调用myspace.byteLength(…)
从包含outfile
viarequire()
的JS文件中访问该函数;将browserify 17.0.0版与上述版本一起使用,我得到了一个工作包,并正确地公开了一个驼峰式全局“beepBoop”。难道“global”与“window”不一样吗?如果是,它不应该是“global.mylib=mylib”而不是“global.window.mylib=…”吗?