Javascript 是否在Node.js上包含具有外部依赖项的browserify捆绑模块?
使用browserify成功地将Javascript类的模块集合捆绑到单个库中。但是我需要将Javascript 是否在Node.js上包含具有外部依赖项的browserify捆绑模块?,javascript,node.js,browserify,Javascript,Node.js,Browserify,使用browserify成功地将Javascript类的模块集合捆绑到单个库中。但是我需要将\uuu和主干定义为全局模块,并想知道这是否是最好的方法 MyLib主要是一个主干集合,需要其他子模块: var _ = require('lodash'); var Backbone = require('backbone'); if (typeof window !== 'undefined') Backbone.$ = window.$; var foo = require('foo'), bar
\uuu
和主干
定义为全局模块,并想知道这是否是最好的方法
MyLib主要是一个主干集合,需要其他子模块:
var _ = require('lodash');
var Backbone = require('backbone');
if (typeof window !== 'undefined') Backbone.$ = window.$;
var foo = require('foo'), bar = require('bar');
module.exports = Backbone.Collection.extend({ ... my library... });
因为主干和下划线更大、更通用,所以我们不希望捆绑它们,而是将它们视为外部依赖项。因此,在package.json
中,我使用browserify shim
排除它们:
...
"browserify": {
"transform": [
"browserify-shim"
]
},
"browserify-shim": {
"lodash": "global:_",
"backbone": "global:Backbone"
}
模块在浏览器中加载良好,因为\uu
被定义为全局变量:
<script src="/javascripts/underscore.js"></script>
<script src="/javascripts/mylib.js"></script>
<script type="text/javascript">
console.log(new MyLib()); // loads fine standalone or via require.js
</script>
此操作失败,原因是类型错误:无法调用未定义的方法“isEqual”,因为\uuu
未定义。在mylib.js内部
顶部我看到一行:
var _ = (typeof window !== "undefined" ? window._ : typeof global !== "undefined" ? global._ : null)
但是,我可以通过如下方式全局定义依赖项来实现:
var _ = GLOBAL.global._ = require("lodash");
var MyLib = require("./libs/mylib");
但这会产生全局变量,许多人在本文中强烈反对:
是否有更好的方法在Node.js中包含Browerify模块的外部依赖项
您可以通过为“非浏览器”编写代码来使用它,例如,在mylib
中,您可以将下划线作为\=require('下划线')
导入,而不是依赖\
作为神奇的全局变量存在。Browserify随后将为浏览器包生成一个新的浏览器包,该浏览器包将简单地使该浏览器包能够正常工作。为了给出一个更好的答案,我们需要看看MyLib
是什么样子(理想情况下,可以减少“just-API”的大部分),我通过=require('下划线')
将它们包括在内,但不通过使用browserify shim排除它们来捆绑它们。我慢慢意识到browserify通过显式要求它们是全局变量来处理这个节点,就像浏览器中的require.js一样。因此,将uu定义为全局变量可能只是不将其绑定到我的库中的代价。我假设您不将其绑定,因为您已经在浏览器中单独加载了
,在这种情况下,您可能希望使用browserify global shim
,而不是browserify shim
,这允许您将原始源代码中的模块需求替换为捆绑代码中的“仅使用全局”。
var _ = GLOBAL.global._ = require("lodash");
var MyLib = require("./libs/mylib");