使用Browserify进行多种构buildconfiguration的复杂骨干应用程序
我正在开发一个大的Backbone应用程序,这个应用程序由于是多租户devise,可以很好的configuration,可以在很多平台上运行。 目前这些应用程序是通过Grunt构build的,环境variables用于确定在应用程序的最终版本中包含哪些Backbone文件。
目前包含的一些文件正在扩展或覆盖之前包含的其他文件。
举个例子:
BaseHeader.js:
var BaseHeader = Backbone.View.extend({ // code });
Header.js:
var Header = BaseHeader.extend({ // code });
目前,我的成品应用程序是用Grunt构build的,它使用一堆脚本标记创build一个.html文件,所有的文件都将被浏览器加载。
我想使用Browserify捆绑我的JS到一个单一的文件,所以现在我有:
BaseHeader.js:
var Backbone = require("backbone"); var BaseHeader = Backbone.View.extend({ // code }); module.exports = BaseHeader;
Header.js:
var Backbone = require("backbone"); var BaseHeader = require("/path/to/BaseHeader.js"); var Header = BaseHeader.extend({ // code }); module.exports = Header;
但我很困惑如何工作的事情。
所有我的应用程序的入口点是相同的App.js文件,它需要调用BaseHeader.js,但它不会对Header.js进行require调用,因为此文件是特定于平台/客户端的。
由于Browserify只是recursion通过需求为了查找和捆绑依赖关系,它将永远不会拿起Header.js所以,我怎样才能创build一个生成任务,以在需要时可选地需要Header.js?
您正在寻找浏览器的require
选项 :
此选项将包含模块或文件作为捆绑包的一部分,即使它在入口应用程序中未被引用。 它还应该通过一个全局的require()
函数将这个模块暴露给你的HTML页面。
从文档:
b.require(file, opts)
使用
require(file)
从bundle外部获取require(file)
。文件参数是可以通过
require.resolve()
解决的任何事情。文件也可以是一个stream,但你也应该使用opts.basedir,以便相对的要求将是可parsing的。
如果文件是一个数组,文件中的每个项目将是必需的。 在文件数组forms中,可以为每个项目使用一个string或对象。 对象项目应该有一个文件属性,其余的参数将被用于opts。
使用opts的expose属性来指定一个自定义的依赖项名称。
require('./vendor/angular/angular.js', {expose: 'angular'})
启用require('angular')