错误
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调用并为每个加载器返回一个函数。
答案 0 :(得分:1)
我需要更新karma配置文件以使用webpack而不是browserify。
我使用了可以找到here的配置文件。
快速解释:
在执行之前,所有测试文件都使用browserify打包。据我所知,Browserify只是将文件的内容及其所有依赖项(通过遵循所有require
s)包含在一个文件中。话虽如此,Webpack以自己的方式做到这一点,并且用它自己的花里胡哨。
当webpack捆绑文件时,它理解!!vue?injext!
在require调用中的含义并正确处理依赖关系。 Browerify不知道这意味着什么。
所以现在webpack实际上可以获取组件文件,通过它的加载器传递它,并按预期返回工厂函数。