Allow override anything using a file with same name in srcDir/app

This commit is contained in:
Pooya Parsa 2017-05-16 02:17:58 +04:30
parent e9d998e522
commit 51618bef29

View File

@ -241,13 +241,27 @@ async function generateRoutesAndFiles () {
if (this.options.store) { if (this.options.store) {
templatesFiles.push('store.js') templatesFiles.push('store.js')
} }
// Resolve all internal template files relative to app directory // Resolve template files
templatesFiles = templatesFiles.map(file => { return {src: r(__dirname, 'app', file), dst: file} }) templatesFiles = templatesFiles.map(file => {
// Allow override anything using a file with same name in srcDir/app
const customPath = r(this.srcDir, 'app', file)
const customFileExists = fs.existsSync(customPath)
return {
src: customFileExists ? customPath : r(__dirname, 'app', file),
dst: file,
custom: customFileExists
}
})
// Add external template files (used in modules) // Add external template files (used in modules)
if (Array.isArray(this.options.build.templates)) { if (Array.isArray(this.options.build.templates)) {
templatesFiles = templatesFiles.concat(this.options.build.templates) templatesFiles = templatesFiles.concat(this.options.build.templates.map(t => {
return Object.assign({custom: true}, t)
}))
} }
let moveTemplates = templatesFiles.map(({src, dst, options}) => { let moveTemplates = templatesFiles.map(({src, dst, options, custom}) => {
// Add template to watchers
this.options.build.watch.push(src)
// Render template to dst
return readFile(src, 'utf8') return readFile(src, 'utf8')
.then((fileContent) => { .then((fileContent) => {
const template = _.template(fileContent, { const template = _.template(fileContent, {
@ -257,7 +271,10 @@ async function generateRoutesAndFiles () {
} }
}) })
const content = template(Object.assign({}, templateVars, { const content = template(Object.assign({}, templateVars, {
options: options || {} options: options || {},
custom,
src,
dst
})) }))
const path = r(this.dir, '.nuxt', dst) const path = r(this.dir, '.nuxt', dst)
return writeFile(path, content, 'utf8') return writeFile(path, content, 'utf8')
@ -518,7 +535,7 @@ function watchPages () {
}) })
/* istanbul ignore next */ /* istanbul ignore next */
const refreshFiles = _.debounce(async () => { const refreshFiles = _.debounce(async () => {
await generateRoutesAndFiles.bind(this) await generateRoutesAndFiles.call(this)
}, 200) }, 200)
// Watch for internals // Watch for internals
this.pagesFilesWatcher = chokidar.watch(patterns, options) this.pagesFilesWatcher = chokidar.watch(patterns, options)