Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否在Node.js上包含具有外部依赖项的browserify捆绑模块?_Javascript_Node.js_Browserify - Fatal编程技术网

Javascript 是否在Node.js上包含具有外部依赖项的browserify捆绑模块?

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

使用browserify成功地将Javascript类的模块集合捆绑到单个库中。但是我需要将
\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");