diff --git a/lib/builder/webpack/style-loader.js b/lib/builder/webpack/style-loader.js index e528d423d7..4c3c689373 100755 --- a/lib/builder/webpack/style-loader.js +++ b/lib/builder/webpack/style-loader.js @@ -45,8 +45,8 @@ module.exports = function styleLoader(ext, loaders = [], isVueLoader = false) { } } - if (this.options.build.extractCSS && !this.options.dev) { - return ExtractTextPlugin.extract({ + if (this.options.build.extractCSS) { + const extraction = ExtractTextPlugin.extract({ fallback: vueStyleLoader, use: [ cssLoader, @@ -54,6 +54,7 @@ module.exports = function styleLoader(ext, loaders = [], isVueLoader = false) { ...loaders ].filter(l => l) }) + return this.options.dev ? ['css-hot-loader'].concat(extraction) : extraction } // https://github.com/yenshih/style-resources-loader diff --git a/package.json b/package.json index 5a314e6742..e19b7c68b1 100644 --- a/package.json +++ b/package.json @@ -123,6 +123,7 @@ "codecov": "^3.0.0", "copy-webpack-plugin": "^4.3.0", "cross-env": "^5.1.1", + "css-hot-loader": "^1.3.4", "eslint": "^4.13.1", "eslint-config-standard": "^11.0.0-beta.0", "eslint-config-standard-jsx": "^4.0.2", diff --git a/test/basic.dev.test.js b/test/basic.dev.test.js index 8bd9e552a5..681685b75d 100644 --- a/test/basic.dev.test.js +++ b/test/basic.dev.test.js @@ -20,7 +20,10 @@ test.serial('Init Nuxt.js', async t => { dev: true, build: { stats: false, - profile: true + profile: true, + extractCSS: { + allChunks: true + } }, plugins: [ '~/plugins/watch.js' @@ -37,6 +40,14 @@ test.serial('Init Nuxt.js', async t => { t.true(spies.log.calledWithMatch('OPEN')) }) +test.serial('/extractCSS', async t => { + const window = await nuxt.renderAndGetWindow(url('/extractCSS')) + const html = window.document.head.innerHTML + t.true(html.includes('vendor.css')) + t.true(!html.includes('30px')) + t.is(window.getComputedStyle(window.document.body).getPropertyValue('font-size'), '30px') +}) + test.serial('remove mixins in live reloading', async t => { const spies = await intercept({ log: true, error: true, stderr: true }) await nuxt.renderRoute(url('/')) diff --git a/test/fixtures/basic/pages/extractCSS.vue b/test/fixtures/basic/pages/extractCSS.vue new file mode 100644 index 0000000000..ec788f2e74 --- /dev/null +++ b/test/fixtures/basic/pages/extractCSS.vue @@ -0,0 +1,9 @@ + + + diff --git a/yarn.lock b/yarn.lock index 85911dd40d..9213de6400 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1957,6 +1957,13 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" +css-hot-loader@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.4.tgz#cd58b9419cd7ec82350b1d60713d86e480a8b286" + dependencies: + loader-utils "^1.1.0" + normalize-url "^1.9.1" + css-loader@^0.28.7: version "0.28.7" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" @@ -4646,7 +4653,7 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -normalize-url@^1.4.0: +normalize-url@^1.4.0, normalize-url@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" dependencies: