是否将Browserify与诸如主干或下划线之类的JavaScript库一起使用?

是否将Browserify与诸如主干或下划线之类的JavaScript库一起使用?,javascript,backbone.js,underscore.js,browserify,Javascript,Backbone.js,Underscore.js,Browserify,我知道我可以使用npm安装下划线,但这不是我在工作环境中所能做的。我需要能够下载underline.js库,然后使其“browserify兼容” 因此,让我们假设underline.js如下所示: (function() { var root = this; // Rest of the code }.call(this)); var underscore = require("./under"); console.log(underscore); 我在硬盘上下载了这个文

我知道我可以使用
npm
安装下划线,但这不是我在工作环境中所能做的。我需要能够下载underline.js库,然后使其“browserify兼容”

因此,让我们假设underline.js如下所示:

(function() {
    var root = this;

    // Rest of the code

}.call(this));
var underscore = require("./under");
console.log(underscore);
我在硬盘上下载了这个文件,并将其保存为under.js

需要下划线的文件如下所示:

(function() {
    var root = this;

    // Rest of the code

}.call(this));
var underscore = require("./under");
console.log(underscore);
然后从cli运行
browserify

我有一个名为
test.HTML
的HTML页面,它所做的基本上就是加载生成的
bundle.js

但是,
console.log(下划线)
行失败-表示
下划线
未定义的

我试过什么?

显然,我将
module.exports
添加到了第一行-就在under.js中的函数定义之前,这就是我得到上述错误的原因。我也尝试了这个方法,但仍然得到了同样的错误


那么,在不使用
npm
安装的模块的情况下,我如何使用Browserify加载诸如underline.js或Backbone之类的库呢?

我通常会将我的供应商库(如underline)添加为脚本标记。下划线将自身附加到全局范围,因此无需在任何地方使用它


如果确实希望以browserify方式使用它,请验证require语句中的路径是否正确(browserify requires是相对路径),并将module.exports语句移动到文件末尾。

这是因为browserify不会将变量添加到全局范围。您下载的版本与通过NPM安装的版本相同

您需要显式地将其附加到窗口以将其导出到顶级作用域

如果创建一个名为“expose_underline.js”的文件并将其放入其中:

var _ = require('./under');
window._ = _;
将执行此操作,然后:
browserify expose\u underline.js>bundle.js
,然后将
bundle.js
添加为
标记。您可以在控制台中执行以下操作:

但是,如果您使用的是browserify,就不应该这样做。它背后的要点(以及Node版本的commonJS)是,无论您在哪里需要它,都需要它。因此,每个需要下划线的文件都应该将其导入局部变量


别担心--您仍将只加载一个副本。

我希望能够自由地将库添加为脚本标记,但我想使用Browserify的主要原因之一是因为我不能这样做。我在
require
语句中有正确的路径,但我不确定将
模块.exports
语句移动到文件末尾是什么意思?如何将整个下划线包装在一个函数中?谢谢,但这仍然不起作用。我已将我的
console.log
更改为
console.log(窗口包含([1,2],1))
,并尝试了
console.log([1,2,1])
-仍然给我
未捕获类型错误:无法读取未定义的属性“contains”
您如何调用browserify?以下是我创建的文件的要点,以验证此功能:非常感谢您的努力!我意识到了问题所在——我总是将
module.exports
添加到我的underline.js文件中。这是不必要的,我是个白痴。再次感谢!是的,下划线使用通用模块定义导出自身--它可以附加到
窗口
,为AMD返回自身或附加到
模块。根据环境需要导出