我是浏览器的新手,虽然好处似乎很有吸引力,但我的用法并不完全清楚。
我有几个问题,希望有人可以澄清。
我看过有关在package.json中使用browserify-shim的博文,包括第三方库,如jquery和bootstrap。我也看过使用gulp等工具生成捆绑文件的帖子。我似乎无法找到一个很好的答案,如果像gulp这样的工具能够自动化这个过程,为什么需要使用browserify-shim。有人可以解释一下吗?为什么甚至需要browserify-shim?我觉得gulp解决方案有点干净,虽然更多涉及。它不会污染package.json与browserify特定的东西,这是一个构建的东西,因此与gulp一起(只是我个人的意见)
如何处理不在npm且不公开的第三方图书馆?例如,我们从第三方购买脚本。该脚本不是任何常见的js,而是具有一些依赖性的常规js文件(例如,在jquery和下划线上)。
答案 0 :(得分:17)
Browserify 可让您了解Node的世界并将其捆绑以便传送到浏览器。它了解Node模块,它通过CommonJS require
语句定义依赖关系。
但是如果你有一些JS代码或库不是定义为Node模块而不支持CommonJS怎么办?输入 browserify-shim 。它为任何脚本提供了一个shim包装器,例如您的私有第三方脚本,因此可以将其定义为Browserify可以理解的节点模块并用作它。
使用browserify-shim与执行Browserify的如何完全正交。基本上有两种选择: A)使用Browserify's command line API或 B)使用Browserify's JS API。
使用构建工具(如 Gulp )意味着第二个选项,因为您在Gulp构建脚本(即gulpfile.js)中使用Browserify的JS API。很多人更喜欢使用Gulp,因为它有一个很好的插件生态系统,可以让你做更多的事情,而不仅仅是调用Browserify(例如编译CoffeeScript,编译SASS,运行JSHint等)。
所以,回答你的具体问题:
只有当您的JS代码不编写为需要通过Browserify捆绑的Node / CommonJS模块时,才需要Browserify-shim。为此,您需要告诉browserify-shim在package.json中将哪些文件作为模块(以及它们具有哪些依赖项)进行填充。请注意,这与Gulp完全无关;无论你是否使用Gulp,都需要它。
您所描述的是browserify-shim的完美用例。将您的第三方脚本放入项目中,根据b-shim文档将文件配置为package.json中的模块,将require
文件配置在代码中,然后执行Browserify将其与代码捆绑在一起。你也可以单独捆绑它们,把它们放在自己的项目中等等 - 但你想要构建它。
有几点需要注意:
window
(这很容易但不是建议)或将代码拆分为单独的文件/模块。