将老式的 Backbone.js 模块迁移到es6模块

gojuced7  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(138)

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

  • 视图1.js *
var app = app || {}
app.View1 = Backbone.View.extend({});
  • 视图2.js *
var app = app || {}
app.View1 = Backbone.View.extend({});

因此,我在文件之间引用使用:

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

在这一点上,这种方法已经过时。
使用babel实际上我想使用browserify编译新的时尚模块导出

  • 视图1.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中,_$等不同的全局变量是未定义的。有没有关于如何保留这两种类型的模块并将它们捆绑在一起的想法?

gjmwrych

gjmwrych1#

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

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

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

然后在其他文件中,您可以只使用Backbone.$Backbone._来使用underscorejquery
或者只将它们作为依赖项导入到使用underscorejQuery的文件中。这是正确的方法。

f45qwnt8

f45qwnt82#

您可以在Browserify选项中定义一些全局变量:Defining global variable for Browserify
在webpack中,全局模块有ProvidePlugin

相关问题