mirror of
https://github.com/nuxt/nuxt.git
synced 2025-03-01 11:53:50 +00:00
fix: check styleResources for existence (#4155)
This commit is contained in:
parent
0669b68c91
commit
a3ba6e96ca
@ -304,7 +304,7 @@ export default class Builder {
|
|||||||
} else if (this._nuxtPages) { // If user defined a custom method to create routes
|
} else if (this._nuxtPages) { // If user defined a custom method to create routes
|
||||||
// Use nuxt.js createRoutes bases on pages/
|
// Use nuxt.js createRoutes bases on pages/
|
||||||
const files = {}
|
const files = {}
|
||||||
;(await glob(`${this.options.dir.pages}/**/*.{vue,js}`, {
|
; (await glob(`${this.options.dir.pages}/**/*.{vue,js}`, {
|
||||||
cwd: this.options.srcDir,
|
cwd: this.options.srcDir,
|
||||||
ignore: this.options.ignore
|
ignore: this.options.ignore
|
||||||
})).forEach((f) => {
|
})).forEach((f) => {
|
||||||
|
@ -1,18 +1,23 @@
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
|
import path from 'path'
|
||||||
import pify from 'pify'
|
import pify from 'pify'
|
||||||
import webpack from 'webpack'
|
import webpack from 'webpack'
|
||||||
import MFS from 'memory-fs'
|
import MFS from 'memory-fs'
|
||||||
|
import Glob from 'glob'
|
||||||
import webpackDevMiddleware from 'webpack-dev-middleware'
|
import webpackDevMiddleware from 'webpack-dev-middleware'
|
||||||
import webpackHotMiddleware from 'webpack-hot-middleware'
|
import webpackHotMiddleware from 'webpack-hot-middleware'
|
||||||
import consola from 'consola'
|
import consola from 'consola'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
parallel,
|
parallel,
|
||||||
sequence
|
sequence,
|
||||||
|
wrapArray
|
||||||
} from '@nuxt/common'
|
} from '@nuxt/common'
|
||||||
|
|
||||||
import { ClientConfig, ServerConfig, PerfLoader } from './config'
|
import { ClientConfig, ServerConfig, PerfLoader } from './config'
|
||||||
|
|
||||||
|
const glob = pify(Glob)
|
||||||
|
|
||||||
export default class WebpackBuilder {
|
export default class WebpackBuilder {
|
||||||
constructor(context) {
|
constructor(context) {
|
||||||
this.context = context
|
this.context = context
|
||||||
@ -60,6 +65,18 @@ export default class WebpackBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check styleResource existence
|
||||||
|
const styleResources = this.context.options.build.styleResources
|
||||||
|
Object.keys(styleResources).forEach(async (ext) => {
|
||||||
|
await Promise.all(wrapArray(styleResources[ext]).map(async (p) => {
|
||||||
|
const styleResourceFiles = await glob(path.resolve(this.context.options.rootDir, p))
|
||||||
|
|
||||||
|
if (!styleResourceFiles || styleResourceFiles.length === 0) {
|
||||||
|
throw new Error(`Style Resource not found: ${p}`)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
// Configure compilers
|
// Configure compilers
|
||||||
this.compilers = compilersOptions.map((compilersOption) => {
|
this.compilers = compilersOptions.map((compilersOption) => {
|
||||||
const compiler = webpack(compilersOption)
|
const compiler = webpack(compilersOption)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import path from 'path'
|
||||||
import MiniCssExtractPlugin from 'mini-css-extract-plugin'
|
import MiniCssExtractPlugin from 'mini-css-extract-plugin'
|
||||||
|
|
||||||
import { wrapArray } from '@nuxt/common'
|
import { wrapArray } from '@nuxt/common'
|
||||||
@ -11,6 +12,7 @@ export default class StyleLoader {
|
|||||||
this.srcDir = options.srcDir
|
this.srcDir = options.srcDir
|
||||||
this.assetsDir = options.dir.assets
|
this.assetsDir = options.dir.assets
|
||||||
this.staticDir = options.dir.static
|
this.staticDir = options.dir.static
|
||||||
|
this.rootDir = options.rootDir
|
||||||
this.loaders = options.build.loaders
|
this.loaders = options.build.loaders
|
||||||
this.extractCSS = options.build.extractCSS
|
this.extractCSS = options.build.extractCSS
|
||||||
this.resources = options.build.styleResources
|
this.resources = options.build.styleResources
|
||||||
@ -31,7 +33,7 @@ export default class StyleLoader {
|
|||||||
// style-resources-loader
|
// style-resources-loader
|
||||||
// https://github.com/yenshih/style-resources-loader
|
// https://github.com/yenshih/style-resources-loader
|
||||||
if (extResource) {
|
if (extResource) {
|
||||||
const patterns = wrapArray(extResource)
|
const patterns = wrapArray(extResource).map(p => path.resolve(this.rootDir, p))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
loader: 'style-resources-loader',
|
loader: 'style-resources-loader',
|
||||||
|
5
test/fixtures/missing-style-resource/nuxt.config.js
vendored
Normal file
5
test/fixtures/missing-style-resource/nuxt.config.js
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
styleResources: {
|
||||||
|
'stylus': './nothinghere'
|
||||||
|
}
|
||||||
|
}
|
3
test/fixtures/with-config/assets/pre-process.css
vendored
Normal file
3
test/fixtures/with-config/assets/pre-process.css
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.pre-process-selector {
|
||||||
|
color: red;
|
||||||
|
}
|
2
test/fixtures/with-config/nuxt.config.js
vendored
2
test/fixtures/with-config/nuxt.config.js
vendored
@ -61,7 +61,7 @@ export default {
|
|||||||
logLevel: 'error'
|
logLevel: 'error'
|
||||||
},
|
},
|
||||||
styleResources: {
|
styleResources: {
|
||||||
scss: '~/assets/pre-process.scss'
|
css: './assets/pre-process.css'
|
||||||
},
|
},
|
||||||
babel: {
|
babel: {
|
||||||
presets({ isServer }) {
|
presets({ isServer }) {
|
||||||
|
@ -56,4 +56,16 @@ describe('nuxt', () => {
|
|||||||
expect(s.includes('Plugin not found')).toBe(true)
|
expect(s.includes('Plugin not found')).toBe(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('Warn when styleResource isn\'t found', () => {
|
||||||
|
const nuxt = new Nuxt({
|
||||||
|
dev: false,
|
||||||
|
rootDir: resolve(__dirname, '..', 'fixtures', 'missing-style-resource')
|
||||||
|
})
|
||||||
|
|
||||||
|
return new Builder(nuxt).build().catch((err) => {
|
||||||
|
const s = String(err)
|
||||||
|
expect(s.includes('Style Resource not found')).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -36,6 +36,11 @@ describe('with-config', () => {
|
|||||||
)).toBe(true)
|
)).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('/ (styleResources styles inlined)', async () => {
|
||||||
|
const { html } = await nuxt.renderRoute('/')
|
||||||
|
expect(html).toContain('.pre-process-selector')
|
||||||
|
})
|
||||||
|
|
||||||
test('/ (custom app.html)', async () => {
|
test('/ (custom app.html)', async () => {
|
||||||
const { html } = await nuxt.renderRoute('/')
|
const { html } = await nuxt.renderRoute('/')
|
||||||
expect(html.includes('<p>Made by Nuxt.js team</p>')).toBe(true)
|
expect(html.includes('<p>Made by Nuxt.js team</p>')).toBe(true)
|
||||||
|
Loading…
Reference in New Issue
Block a user