From 6c451948eb6c784b24d246ce7e69afe5714844f0 Mon Sep 17 00:00:00 2001 From: ktsn Date: Thu, 8 Sep 2016 14:08:47 +0900 Subject: [PATCH 1/3] allow to export constructor even if using es6 default export --- lib/loader.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/loader.js b/lib/loader.js index a098bf8ed..196d8307d 100644 --- a/lib/loader.js +++ b/lib/loader.js @@ -170,7 +170,10 @@ module.exports = function (content) { var exports = '__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n' + // ES6 modules interop - 'if (typeof __vue_exports__.default === "object") {\n' + + 'if (\n' + + ' typeof __vue_exports__.default === "object" ||\n' + + ' typeof __vue_exports__.default === "function"\n' + + ') {\n' + (isProduction ? '' : checkNamedExports) + '__vue_options__ = __vue_exports__ = __vue_exports__.default\n' + '}\n' + From 29d86725066d518de9e1e81f0570744f9e5a1cb3 Mon Sep 17 00:00:00 2001 From: ktsn Date: Thu, 8 Sep 2016 14:09:46 +0900 Subject: [PATCH 2/3] add test for `export default Vue.extend` --- package.json | 1 + test/fixtures/extend.vue | 12 ++++++++++++ test/test.js | 14 ++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 test/fixtures/extend.vue diff --git a/package.json b/package.json index 3850f2194..e10a01810 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "stylus": "^0.54.5", "stylus-loader": "^2.0.0", "sugarss": "^0.1.3", + "vue": "^2.0.0-rc.4", "webpack": "^1.12.2" } } diff --git a/test/fixtures/extend.vue b/test/fixtures/extend.vue new file mode 100644 index 000000000..ca11dfe65 --- /dev/null +++ b/test/fixtures/extend.vue @@ -0,0 +1,12 @@ + + + diff --git a/test/test.js b/test/test.js index 4d16cbe0e..04f5d9178 100644 --- a/test/test.js +++ b/test/test.js @@ -333,4 +333,18 @@ describe('vue-loader', function () { done() }) }) + + it('allows to export extended constructor', function (done) { + test({ + entry: './test/fixtures/extend.vue' + }, function (window, module) { + // should export Vue constructor + var vnode = mockRender(module.options, { + msg: 'success' + }) + expect(vnode.tag).to.equal('div') + expect(vnode.children[0]).to.equal('success') + done() + }) + }) }) From eabf08865cba16a5493c9d4328ef4cb78b1c0028 Mon Sep 17 00:00:00 2001 From: ktsn Date: Thu, 8 Sep 2016 15:49:24 +0900 Subject: [PATCH 3/3] test instance data of exported constructor --- test/test.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/test.js b/test/test.js index 04f5d9178..abe47a253 100644 --- a/test/test.js +++ b/test/test.js @@ -337,13 +337,14 @@ describe('vue-loader', function () { it('allows to export extended constructor', function (done) { test({ entry: './test/fixtures/extend.vue' - }, function (window, module) { - // should export Vue constructor - var vnode = mockRender(module.options, { + }, function (window, Module) { + // extend.vue should export Vue constructor + var vnode = mockRender(Module.options, { msg: 'success' }) expect(vnode.tag).to.equal('div') expect(vnode.children[0]).to.equal('success') + expect(new Module().msg === 'success') done() }) })