将旧式Backbone模块迁移到es6模块

时间:2017-10-20 11:15:14

标签: javascript backbone.js babeljs es6-modules

我拥有基于全局app变量以这种方式声明的所有这些模块,然后通过gulpfile捆绑

view1.js

var app = app || {}
app.View1 = Backbone.View.extend({});

view2.js

var app = app || {}
app.View1 = Backbone.View.extend({});

所以我使用以下文件引用文件:

var app = app || {};
new app.View1();
new app.View2();

此时此方法已过时。

使用babel infact我希望使用新的时尚模块导出browserify进行编译

view1.js

import Backbone
export default = Backbone.View.extend({});

现在,我的问题是我想在不编辑旧模块的情况下开始迁移(至少目前为止)。我尝试过类似的东西:

import * as _ from "underscore";
import Backbone from "Backbone";
import * as LoginModal from "../views/loginModal";
import Router from "./router";

new LoginModal();
new Router();
Backbone.history.start({
    pushState : true,
    hashChange : false
});

问题在于LoginModal _$中的各种全局变量未定义。 关于如何保留两种类型的模块并将它们捆绑在一起的任何想法?

2 个答案:

答案 0 :(得分:1)

在您的主文件中,您可以导入jQuery_并将其分配给Backbone,如下所示:

import $ from "jquery";
import _ from "underscore";

Backbone.$ = $;
Backbone._ = _;

然后在您的其他文件中,您可以使用Backbone.$& Backbone._使用underscorejquery

或者只将它们作为依赖项导入到使用underscorejQuery的文件中。这是正确的方法。

答案 1 :(得分:0)

您可以在Browserify选项中定义一些全局变量:Defining global variable for Browserify

在webpack中有ProvidePlugin个全局模块。