diff --git a/src/style/css.js b/src/style/css.js index cf91245..5053659 100644 --- a/src/style/css.js +++ b/src/style/css.js @@ -25,6 +25,7 @@ const addScopeID = postcss.plugin('add-scope-id', options => { const selectorTransformer = selectorParser(selectors => { selectors.each(selector => { let target = null + /* eslint-disable complexity */ selector.each(n => { if (n.type === 'combinator' && n.value === '>>>') { n.value = ' ' @@ -51,6 +52,7 @@ const addScopeID = postcss.plugin('add-scope-id', options => { target = n } }) + /* eslint-enable complexity */ target && selector.insertAfter(target, selectorParser.attribute({ attribute: options.scopeID diff --git a/src/style/index.js b/src/style/index.js index 10da810..5c69fc9 100644 --- a/src/style/index.js +++ b/src/style/index.js @@ -32,6 +32,7 @@ function ensureDirectory (directory) { } } +/* eslint-disable complexity */ export default function (files, options) { if (typeof (options.css) === 'boolean') { return @@ -74,3 +75,4 @@ export default function (files, options) { if (err) throw err }) } +/* eslint-enable complexity */ diff --git a/src/vueTransform.js b/src/vueTransform.js index 83aa331..b22050e 100644 --- a/src/vueTransform.js +++ b/src/vueTransform.js @@ -89,6 +89,10 @@ async function processScript (source, id, content, options, nodes, modules, scop debug(`Process script: ${id}`) const lang = normalizeLang(source.attrs.lang) + if (source.attrs.src) { + source.code = `import __vue_module__ from '${source.attrs.src}'; export default __vue_module__;` + } + if (source.attrs.lang && ['js', 'babel'].indexOf(source.attrs.lang) < 0) { if (!(source.attrs.lang in options.script)) { throw new Error(`[rollup-plugin-vue] ${source.attrs.lang} is not yet supported in .vue files.`) diff --git a/test/expects/external-script.css b/test/expects/external-script.css new file mode 100644 index 0000000..1cc7e65 --- /dev/null +++ b/test/expects/external-script.css @@ -0,0 +1,3 @@ +body { + color: #000; +} \ No newline at end of file diff --git a/test/expects/external-script.js b/test/expects/external-script.js new file mode 100644 index 0000000..29b2079 --- /dev/null +++ b/test/expects/external-script.js @@ -0,0 +1,14 @@ +const data = { + name: 'test' +}; + +var __vue_module__ = { + data() { + return data + } +}; + +var __$__vue_module__ = Object.assign(__vue_module__, { template: "
",}); + __$__vue_module__.prototype = __vue_module__.prototype; + +export default __$__vue_module__; diff --git a/test/fixtures/external-script.js b/test/fixtures/external-script.js new file mode 100644 index 0000000..403c23e --- /dev/null +++ b/test/fixtures/external-script.js @@ -0,0 +1,9 @@ +const data = { + name: 'test' +} + +export default { + data() { + return data + } +} \ No newline at end of file diff --git a/test/fixtures/external-script.vue b/test/fixtures/external-script.vue new file mode 100644 index 0000000..70fd8e4 --- /dev/null +++ b/test/fixtures/external-script.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/test/test.js b/test/test.js index 3d4bede..ca76a6c 100644 --- a/test/test.js +++ b/test/test.js @@ -63,7 +63,8 @@ function test(name) { 'pug', 'less', 'style', - 'stylus' + 'stylus', + 'external-script' ].indexOf(name) > -1) { var css = read('expects/' + name + '.css') assert.equal(css.trim(), actualCss.trim(), 'should output style tag content')