使用browserify的外部npm模块

时间:2014-06-08 07:58:25

标签: javascript browserify

我现在有些困惑。这里是简单的条目main.js文件:

var _ = require('lodash');

我在node_modules文件夹中安装了lodash,但它是出于开发目的。我不会将其包含在结果包中。

browserify -x lodash -e main.js

它几乎看起来很有效。不会引发错误,并且包中不包含lodash。但是当我尝试在浏览器中加载它时,我得到未捕获错误:无法找到模块'9TlSmm'。查看生成的文件,我看到了:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="fu
nction"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Ca
nnot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,functi
on(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports
}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);re
turn s})({1:[function(require,module,exports){
var _ = require('lodash');

},{"lodash":"9TlSmm"}]},{},[1])

我不明白这里发生了什么。为什么它为lodash创建了别名9TlSmm?是不是应该忽略这一点,并期望lodash将从另一个文件传递?

更新

好的,我看到了这个问题。当我运行browserify -r lodash > vendor.js并查看其中时,会为其指定相同的名称9TlSmm。然而事实是,在我的真实vendor.js中,我使用的是Bower而不是Npm的lodash。因此它被分配了另一个不匹配的别名。如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

在这种情况下你有两个选择:

1)使用npm安装lodash而不是使用Bower

2)使用debowerify转换从Bower

安装的lodash