Skip to content

Commit 26b3ca1

Browse files
committed
test vue-style-loader SSR style extraction
1 parent bc8f5a3 commit 26b3ca1

File tree

4 files changed

+66
-2
lines changed

4 files changed

+66
-2
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"postcss-selector-parser": "^2.0.0",
3939
"source-map": "^0.5.6",
4040
"vue-hot-reload-api": "^2.0.1",
41-
"vue-style-loader": "^1.0.0",
41+
"vue-style-loader": "^2.0.0",
4242
"vue-template-es2015-compiler": "^1.2.2"
4343
},
4444
"peerDependencies": {
@@ -73,6 +73,7 @@
7373
"sugarss": "^0.2.0",
7474
"url-loader": "^0.5.7",
7575
"vue": "^2.1.0",
76+
"vue-server-renderer": "^2.1.10",
7677
"vue-template-compiler": "^2.1.0",
7778
"webpack": "^2.2.0"
7879
}

test/fixtures/ssr-style.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
var Vue = require('vue')
2+
var App = require('./ssr-style.vue')
3+
4+
module.exports = new Vue(App)

test/fixtures/ssr-style.vue

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<template>
2+
<div>
3+
<h1>Hello</h1>
4+
<basic/>
5+
</div>
6+
</template>
7+
8+
<script>
9+
import Basic from './basic.vue'
10+
11+
export default {
12+
components: { Basic }
13+
}
14+
</script>
15+
16+
<style>
17+
h1 { color: green; }
18+
</style>
19+
20+
<style src="./style-import.css"></style>

test/test.js

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ var webpack = require('webpack')
66
var MemoryFS = require('memory-fs')
77
var expect = require('chai').expect
88
var genId = require('../lib/gen-id')
9+
var SSR = require('vue-server-renderer')
910
var compiler = require('../lib/template-compiler')
1011
var normalizeNewline = require('normalize-newline')
1112
var ExtractTextPlugin = require("extract-text-webpack-plugin")
1213
var SourceMapConsumer = require('source-map').SourceMapConsumer
1314

14-
var loaderPath = 'expose-loader?vueModule!' + path.resolve(__dirname, '../index.js')
15+
var rawLoaderPath = path.resolve(__dirname, '../index.js')
16+
var loaderPath = 'expose-loader?vueModule!' + rawLoaderPath
1517
var mfs = new MemoryFS()
1618
var globalConfig = {
1719
output: {
@@ -49,6 +51,11 @@ function bundle (options, cb) {
4951
console.error(err.message)
5052
})
5153
}
54+
if (stats.compilation.errors) {
55+
stats.compilation.errors.forEach(err => {
56+
console.error(err.message)
57+
})
58+
}
5259
expect(stats.compilation.errors).to.be.empty
5360
cb(mfs.readFileSync('/test.build.js').toString())
5461
})
@@ -511,4 +518,36 @@ describe('vue-loader', function () {
511518
done()
512519
})
513520
})
521+
522+
it('SSR style extraction', done => {
523+
bundle({
524+
target: 'node',
525+
entry: './test/fixtures/ssr-style.js',
526+
output: {
527+
path: '/',
528+
filename: 'test.build.js',
529+
libraryTarget: 'commonjs2'
530+
},
531+
externals: ['vue'],
532+
module: {
533+
rules: [{ test: /\.vue$/, loader: rawLoaderPath }]
534+
}
535+
}, code => {
536+
const renderer = SSR.createBundleRenderer(code)
537+
const context = {}
538+
renderer.renderToString(context, (err, res) => {
539+
if (err) return done(err)
540+
expect(res).to.contain('server-rendered')
541+
expect(res).to.contain('<h1>Hello</h1>')
542+
expect(res).to.contain('Hello from Component A!')
543+
// from main component
544+
expect(context.styles).to.contain('h1 { color: green;')
545+
// from imported child component
546+
expect(context.styles).to.contain('comp-a h2 {\n color: #f00;')
547+
// from imported css file
548+
expect(context.styles).to.contain('h1 { color: red;')
549+
done()
550+
})
551+
})
552+
})
514553
})

0 commit comments

Comments
 (0)