我正在开发一个大型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?
答案 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')