2017-08-26 65 views
1

我在1个文件中有一个骨干视图,我试图在另一个'entry'文件中实例化。使用Webpack将输出文件捆绑在一起,并在输出文件中首先将条目文件加载到视图代码之前。事情是这样的:Backbone View由于导入顺序而不是Webpack中的构造函数错误

index.js:

import $ from 'jquery'; 
import { Book } from './views/Book'; 

$(document).ready(function() { 
    new Book(); 
}); 

Book.js

import Backbone from 'backbone'; 

const Book = Backbone.View.extend({ 
    tagName: 'li', 

    template: _.template('<%= name %>'), 

    render: function() { 
    this.$el.html(this.template(this.model.toJSON())); 
    return this; 
    } 
}); 

export default Book; 

在运行的项目中,我得到这个错误在控制台:

TypeError: __WEBPACK_IMPORTED_MODULE_1__views_Book__.Book is not a constructor 
    at HTMLDocument.<anonymous> 
index.js:5 Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_1__views_Book__.Book is not a constructor 

当运行webpack,我得到这个警告:

WARNING in ./js/index.js 
5:6-10 "export 'Book' was not found in './views/Book' 

我看到一些关于循环依赖的帖子,但不认为这是这里的问题。有人可以帮忙吗?谢谢!

回答

1

如果使用

export default Book 

,那么你需要这样

import Book from './views/Book'; 

export Book 

加载,它将与工作

import { Book } from './views/Book'; 
+0

是的,前段时间我解决了这个问题,但'视图不是构造函数'错误仍然存​​在。我认为他们可能有关系,但他们显然不是。谢谢! – user3033194

+0

也许我需要配置Webpack,以便在运行index.js(当前设置为入口点)之前加载依赖关系。 – user3033194

0

好的,修复程序正在改变我的webpack配置文件中的入口点。我从变化的切入点:

entry: '/index.js' 

entry: [SRC_DIR + '/views/main.js', SRC_DIR + '/index.js'] 

这保证了依赖(在main.js)首次加载,其次是index.js文件。因此,在捆绑的输出文件中,依赖项(在本例中为Book视图)在初始化它们之前已经实现。因此问题不在于我发布的代码中,而是在Webpack的配置文件中。