使用Browserify的多个构建配置的复杂骨干应用程序

时间:2014-11-12 01:09:30

标签: javascript node.js backbone.js browserify

我正在开发一个大型Backbone应用程序,该应用程序由于具有多租户功能而设计为非常可配置,并且可以在许多平台上运行。目前,这些应用程序是通过Grunt构建的,环境变量用于确定应用程序的最终版本中包含哪些Backbone文件。

目前,包含的一些文件正在扩展或覆盖之前包含的其他文件。

举个例子:

BaseHeader.js:

var BaseHeader = Backbone.View.extend({
    // code
});

Header.js:

var Header = BaseHeader.extend({
    // code
});

目前我的应用程序是使用Grunt构建的,它创建了一个带有一堆脚本标记的.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进行require调用,但它不会对Header.js进行require调用,因为此文件是特定于平台/客户端的。< / p>

由于Browserify只是简单地通过需求来查找和捆绑依赖项,因此它永远不会获取Header.js 那么,如何创建构建任务以在需要时可选地需要Header.js?

1 个答案:

答案 0 :(得分:1)

您正在寻找require option to browserify

此选项将包含模块或文件作为捆绑包的一部分,即使它未在条目应用程序中引用。它还应该通过全局require()函数将所述模块公开到您的HTML页面。

来自文档:

  

b.require(file, opts)

     

使用require(file)将文件从包外部提供。

     

文件参数是require.resolve()可以解决的任何内容。

     

文件也可以是一个流,但你也应该使用opts.basedir,以便相对要求可以解析。

     

如果file是数组,则需要文件中的每个项目。在文件数组表单中,您可以为每个项目使用字符串或对象。对象项应具有file属性,其余参数将用于opts。

     

使用opts的expose属性指定自定义依赖项名称。 require('./vendor/angular/angular.js', {expose: 'angular'})启用require('angular')