!! VUE?注入!不工作;未按预期返回工厂功能

时间:2017-01-03 21:59:35

标签: webpack jasmine karma-jasmine vue.js

错误

TypeError: Object is not a constructor (evaluating 'DataTableInjector'

Package.js

"vue-loader": "^8.3.0",
"inject-loader": "^2.0.1",
"webpack": "^1.12.2",

代码:

const DataTableInjector = require('!!vue?inject!./../../../js/components/DataTable.vue');

let DataTable = DataTableInjector({
  'lodash/debounce': 'injected dep'
});

注入加载器应该采用vue模板DataTable并返回一个工厂函数,我可以将依赖性覆盖对象传递给它,但它正在返回一个普通对象,就像错误所示。

我认为这个错误是版本问题的结果,虽然我使用的是正确版本的webpack,inject-loader和vue-loader。所以那不可能。

我知道两个加载器实际上都是全局可用的,只需对两个加载器执行require调用并为每个加载器返回一个函数。

1 个答案:

答案 0 :(得分:1)

我需要更新karma配置文件以使用webpack而不是browserify。

我使用了可以找到here的配置文件。

快速解释:

在执行之前,所有测试文件都使用browserify打包。据我所知,Browserify只是将文件的内容及其所有依赖项(通过遵循所有require s)包含在一个文件中。话虽如此,Webpack以自己的方式做到这一点,并且用它自己的花里胡哨。

当webpack捆绑文件时,它理解!!vue?injext!在require调用中的含义并正确处理依赖关系。 Browerify不知道这意味着什么。

所以现在webpack实际上可以获取组件文件,通过它的加载器传递它,并按预期返回工厂函数。