mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-27 08:02:01 +00:00
parent
12ca1ce37d
commit
7f542e08e5
@ -416,19 +416,16 @@ export default class Builder {
|
|||||||
// Sanitize custom template files
|
// Sanitize custom template files
|
||||||
this.options.build.templates = this.options.build.templates.map((t) => {
|
this.options.build.templates = this.options.build.templates.map((t) => {
|
||||||
const src = t.src || t
|
const src = t.src || t
|
||||||
|
return {
|
||||||
return Object.assign(
|
src: r(this.options.srcDir, src),
|
||||||
{
|
dst: t.dst || path.basename(src),
|
||||||
src: r(this.options.srcDir, src),
|
custom: true,
|
||||||
dst: t.dst || path.basename(src),
|
...(typeof t === 'object' ? t : undefined)
|
||||||
custom: true
|
}
|
||||||
},
|
|
||||||
typeof t === 'object' ? t : undefined
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
const customTemplateFiles = this.options.build.templates.map(
|
|
||||||
t => t.dst || path.basename(t.src || t)
|
const customTemplateFiles = this.options.build.templates.map(t => t.dst || path.basename(t.src || t))
|
||||||
)
|
|
||||||
const templatePaths = uniq([
|
const templatePaths = uniq([
|
||||||
// Modules & user provided templates
|
// Modules & user provided templates
|
||||||
// first custom to keep their index
|
// first custom to keep their index
|
||||||
@ -437,20 +434,25 @@ export default class Builder {
|
|||||||
...templateContext.templateFiles
|
...templateContext.templateFiles
|
||||||
])
|
])
|
||||||
|
|
||||||
|
const appDir = path.resolve(this.options.srcDir, this.options.dir.app)
|
||||||
|
|
||||||
templateContext.templateFiles = await Promise.all(templatePaths.map(async (file) => {
|
templateContext.templateFiles = await Promise.all(templatePaths.map(async (file) => {
|
||||||
// Use custom file if provided in build.templates[]
|
// Use custom file if provided in build.templates[]
|
||||||
const customTemplateIndex = customTemplateFiles.indexOf(file)
|
const customTemplateIndex = customTemplateFiles.indexOf(file)
|
||||||
const customTemplate = customTemplateIndex !== -1 ? this.options.build.templates[customTemplateIndex] : null
|
const customTemplate = customTemplateIndex !== -1 ? this.options.build.templates[customTemplateIndex] : null
|
||||||
let src = customTemplate ? (customTemplate.src || customTemplate) : r(this.template.dir, file)
|
let src = customTemplate ? (customTemplate.src || customTemplate) : r(this.template.dir, file)
|
||||||
|
|
||||||
// Allow override templates using a file with same name in ${srcDir}/app
|
// Allow override templates using a file with same name in ${srcDir}/app
|
||||||
const customPath = r(this.options.srcDir, this.options.dir.app, file)
|
const customAppFile = path.resolve(this.options.srcDir, this.options.dir.app, file)
|
||||||
const customFileExists = await fsExtra.exists(customPath)
|
const customAppFileExists = customAppFile.startsWith(appDir) && await fsExtra.exists(customAppFile)
|
||||||
src = customFileExists ? customPath : src
|
if (customAppFileExists) {
|
||||||
|
src = customAppFile
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
src,
|
src,
|
||||||
dst: file,
|
dst: file,
|
||||||
custom: Boolean(customFileExists || customTemplate),
|
custom: Boolean(customAppFileExists || customTemplate),
|
||||||
options: (customTemplate && customTemplate.options) || {}
|
options: (customTemplate && customTemplate.options) || {}
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
@ -25,8 +25,9 @@ describe('builder: builder generate', () => {
|
|||||||
r.mockImplementation((...args) => `r(${args.join(', ')})`)
|
r.mockImplementation((...args) => `r(${args.join(', ')})`)
|
||||||
fs.readFile.mockImplementation((...args) => `readFile(${args.join(', ')})`)
|
fs.readFile.mockImplementation((...args) => `readFile(${args.join(', ')})`)
|
||||||
fs.outputFile.mockImplementation((...args) => `outputFile(${args.join(', ')})`)
|
fs.outputFile.mockImplementation((...args) => `outputFile(${args.join(', ')})`)
|
||||||
jest.spyOn(path, 'join').mockImplementation((...args) => `join(${args.join(', ')})`)
|
const { join, resolve } = path.posix
|
||||||
jest.spyOn(path, 'resolve').mockImplementation((...args) => `resolve(${args.join(', ')})`)
|
jest.spyOn(path, 'join').mockImplementation((...args) => join(...args))
|
||||||
|
jest.spyOn(path, 'resolve').mockImplementation((...args) => resolve(...args))
|
||||||
})
|
})
|
||||||
|
|
||||||
afterAll(() => {
|
afterAll(() => {
|
||||||
@ -211,7 +212,7 @@ describe('builder: builder generate', () => {
|
|||||||
await builder.resolveCustomTemplates(templateContext)
|
await builder.resolveCustomTemplates(templateContext)
|
||||||
|
|
||||||
expect(templateContext.templateFiles).toEqual([
|
expect(templateContext.templateFiles).toEqual([
|
||||||
{ custom: true, dst: 'foo.js', src: 'r(/var/nuxt/src, app, foo.js)', options: {} },
|
{ custom: true, dst: 'foo.js', src: '/var/nuxt/src/app/foo.js', options: {} },
|
||||||
{ custom: true, dst: 'bar.js', src: '/var/nuxt/templates/bar.js', options: {} },
|
{ custom: true, dst: 'bar.js', src: '/var/nuxt/templates/bar.js', options: {} },
|
||||||
{ custom: true, dst: 'baz.js', src: '/var/nuxt/templates/baz.js', options: {} },
|
{ custom: true, dst: 'baz.js', src: '/var/nuxt/templates/baz.js', options: {} },
|
||||||
{ custom: false, dst: 'router.js', src: 'r(/var/nuxt/templates, router.js)', options: {} },
|
{ custom: false, dst: 'router.js', src: 'r(/var/nuxt/templates, router.js)', options: {} },
|
||||||
@ -237,12 +238,12 @@ describe('builder: builder generate', () => {
|
|||||||
expect(path.resolve).toBeCalledTimes(1)
|
expect(path.resolve).toBeCalledTimes(1)
|
||||||
expect(path.resolve).toBeCalledWith('/var/nuxt/templates', 'views/loading', 'test_loading_indicator.html')
|
expect(path.resolve).toBeCalledWith('/var/nuxt/templates', 'views/loading', 'test_loading_indicator.html')
|
||||||
expect(fs.exists).toBeCalledTimes(1)
|
expect(fs.exists).toBeCalledTimes(1)
|
||||||
expect(fs.exists).toBeCalledWith('resolve(/var/nuxt/templates, views/loading, test_loading_indicator.html)')
|
expect(fs.exists).toBeCalledWith('/var/nuxt/templates/views/loading/test_loading_indicator.html')
|
||||||
expect(templateFiles).toEqual([{
|
expect(templateFiles).toEqual([{
|
||||||
custom: false,
|
custom: false,
|
||||||
dst: 'loading.html',
|
dst: 'loading.html',
|
||||||
options: { name: 'test_loading_indicator' },
|
options: { name: 'test_loading_indicator' },
|
||||||
src: 'resolve(/var/nuxt/templates, views/loading, test_loading_indicator.html)'
|
src: '/var/nuxt/templates/views/loading/test_loading_indicator.html'
|
||||||
}])
|
}])
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -265,7 +266,7 @@ describe('builder: builder generate', () => {
|
|||||||
expect(path.resolve).toBeCalledTimes(1)
|
expect(path.resolve).toBeCalledTimes(1)
|
||||||
expect(path.resolve).toBeCalledWith('/var/nuxt/templates', 'views/loading', '@/app/template.vue.html')
|
expect(path.resolve).toBeCalledWith('/var/nuxt/templates', 'views/loading', '@/app/template.vue.html')
|
||||||
expect(fs.exists).toBeCalledTimes(2)
|
expect(fs.exists).toBeCalledTimes(2)
|
||||||
expect(fs.exists).nthCalledWith(1, 'resolve(/var/nuxt/templates, views/loading, @/app/template.vue.html)')
|
expect(fs.exists).nthCalledWith(1, '/var/nuxt/templates/views/loading/@/app/template.vue.html')
|
||||||
expect(fs.exists).nthCalledWith(2, 'resolveAlias(@/app/template.vue)')
|
expect(fs.exists).nthCalledWith(2, 'resolveAlias(@/app/template.vue)')
|
||||||
expect(templateFiles).toEqual([{
|
expect(templateFiles).toEqual([{
|
||||||
custom: true,
|
custom: true,
|
||||||
@ -294,7 +295,7 @@ describe('builder: builder generate', () => {
|
|||||||
expect(path.resolve).toBeCalledTimes(1)
|
expect(path.resolve).toBeCalledTimes(1)
|
||||||
expect(path.resolve).toBeCalledWith('/var/nuxt/templates', 'views/loading', '@/app/empty.vue.html')
|
expect(path.resolve).toBeCalledWith('/var/nuxt/templates', 'views/loading', '@/app/empty.vue.html')
|
||||||
expect(fs.exists).toBeCalledTimes(2)
|
expect(fs.exists).toBeCalledTimes(2)
|
||||||
expect(fs.exists).nthCalledWith(1, 'resolve(/var/nuxt/templates, views/loading, @/app/empty.vue.html)')
|
expect(fs.exists).nthCalledWith(1, '/var/nuxt/templates/views/loading/@/app/empty.vue.html')
|
||||||
expect(fs.exists).nthCalledWith(2, 'resolveAlias(@/app/empty.vue)')
|
expect(fs.exists).nthCalledWith(2, 'resolveAlias(@/app/empty.vue)')
|
||||||
expect(consola.error).toBeCalledTimes(1)
|
expect(consola.error).toBeCalledTimes(1)
|
||||||
expect(consola.error).toBeCalledWith('Could not fetch loading indicator: @/app/empty.vue')
|
expect(consola.error).toBeCalledWith('Could not fetch loading indicator: @/app/empty.vue')
|
||||||
@ -436,7 +437,7 @@ describe('builder: builder generate', () => {
|
|||||||
expect(path.resolve).toBeCalledTimes(1)
|
expect(path.resolve).toBeCalledTimes(1)
|
||||||
expect(path.resolve).toBeCalledWith('/var/nuxt/src', '/var/nuxt/src/layouts')
|
expect(path.resolve).toBeCalledWith('/var/nuxt/src', '/var/nuxt/src/layouts')
|
||||||
expect(fs.exists).toBeCalledTimes(1)
|
expect(fs.exists).toBeCalledTimes(1)
|
||||||
expect(fs.exists).toBeCalledWith('resolve(/var/nuxt/src, /var/nuxt/src/layouts)')
|
expect(fs.exists).toBeCalledWith('/var/nuxt/src/layouts')
|
||||||
expect(builder.resolveFiles).toBeCalledTimes(1)
|
expect(builder.resolveFiles).toBeCalledTimes(1)
|
||||||
expect(builder.resolveFiles).toBeCalledWith('/var/nuxt/src/layouts')
|
expect(builder.resolveFiles).toBeCalledWith('/var/nuxt/src/layouts')
|
||||||
expect(builder.relativeToBuild).toBeCalledTimes(2)
|
expect(builder.relativeToBuild).toBeCalledTimes(2)
|
||||||
@ -503,7 +504,7 @@ describe('builder: builder generate', () => {
|
|||||||
expect(path.resolve).toBeCalledTimes(1)
|
expect(path.resolve).toBeCalledTimes(1)
|
||||||
expect(path.resolve).toBeCalledWith('/var/nuxt/src', '/var/nuxt/src/layouts')
|
expect(path.resolve).toBeCalledWith('/var/nuxt/src', '/var/nuxt/src/layouts')
|
||||||
expect(fs.exists).toBeCalledTimes(1)
|
expect(fs.exists).toBeCalledTimes(1)
|
||||||
expect(fs.exists).toBeCalledWith('resolve(/var/nuxt/src, /var/nuxt/src/layouts)')
|
expect(fs.exists).toBeCalledWith('/var/nuxt/src/layouts')
|
||||||
expect(builder.resolveFiles).not.toBeCalled()
|
expect(builder.resolveFiles).not.toBeCalled()
|
||||||
expect(fs.mkdirp).not.toBeCalled()
|
expect(fs.mkdirp).not.toBeCalled()
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user