From 5b923fd97ece783d4d8f452a09fd48c0bd04e649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Chopin?= Date: Thu, 4 Jan 2018 18:10:17 +0100 Subject: [PATCH] feat: Add extensions option to add more language support --- lib/app/middleware.js | 4 ++-- lib/app/store.js | 4 ++-- lib/builder/builder.js | 1 + lib/common/options.js | 9 +++++++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/app/middleware.js b/lib/app/middleware.js index 57e04073cb..8812d41813 100644 --- a/lib/app/middleware.js +++ b/lib/app/middleware.js @@ -1,5 +1,5 @@ <% if (middleware) { %> -let files = require.context('@/middleware', false, /^\.\/.*\.(js|ts)$/) +let files = require.context('@/middleware', false, /^\.\/.*\.(<%= extensions %>)$/) let filenames = files.keys() function getModule (filename) { @@ -12,7 +12,7 @@ let middleware = {} // Generate the middleware for (let filename of filenames) { - let name = filename.replace(/^\.\//, '').replace(/\.(js|ts)$/, '') + let name = filename.replace(/^\.\//, '').replace(/\.(<%= extensions %>)$/, '') middleware[name] = getModule(filename) } diff --git a/lib/app/store.js b/lib/app/store.js index d1e59efcd6..0e704af1a7 100644 --- a/lib/app/store.js +++ b/lib/app/store.js @@ -4,7 +4,7 @@ import Vuex from 'vuex' Vue.use(Vuex) // Recursive find files in {srcDir}/store -const files = require.context('@/store', true, /^\.\/.*\.(js|ts)$/) +const files = require.context('@/store', true, /^\.\/.*\.(<%= extensions %>)$/) const filenames = files.keys() // Store @@ -30,7 +30,7 @@ if (typeof storeData !== 'function') { } for (let filename of filenames) { - let name = filename.replace(/^\.\//, '').replace(/\.(js|ts)$/, '') + let name = filename.replace(/^\.\//, '').replace(/\.(<%= extensions %>)$/, '') if (name === 'index') continue let namePath = name.split(/\//) diff --git a/lib/builder/builder.js b/lib/builder/builder.js index 5351c43453..4687a35c64 100644 --- a/lib/builder/builder.js +++ b/lib/builder/builder.js @@ -210,6 +210,7 @@ module.exports = class Builder { ] const templateVars = { options: this.options, + extensions: this.options.extensions.map((ext) => ext.replace(/^\./, '')).join('|'), messages: this.options.messages, uniqBy: _.uniqBy, isDev: this.options.dev, diff --git a/lib/common/options.js b/lib/common/options.js index 7ce535496a..3f8fe27a02 100755 --- a/lib/common/options.js +++ b/lib/common/options.js @@ -31,6 +31,9 @@ Options.from = function (_options) { if (typeof options.layoutTransition === 'string') { options.layoutTransition = { name: options.layoutTransition } } + if (typeof options.extensions === 'string') { + options.extensions = [ options.extensions ] + } const hasValue = v => typeof v === 'string' && v options.rootDir = hasValue(options.rootDir) ? options.rootDir : process.cwd() @@ -58,6 +61,11 @@ Options.from = function (_options) { .filter(dir => hasValue(dir)) .map(dir => resolve(options.rootDir, dir)) + // Sanitize extensions + if (options.extensions.indexOf('js') === -1) { + options.extensions.unshift('js') + } + // If app.html is defined, set the template path to the user template options.appTemplatePath = resolve(options.buildDir, 'views/app.template.html') if (existsSync(join(options.srcDir, 'app.html'))) { @@ -143,6 +151,7 @@ Options.defaults = { nuxtDir: resolve(__dirname, '../..'), nuxtAppDir: resolve(__dirname, '../app'), modulesDir: ['node_modules'], // ~> relative to options.rootDir + extensions: [], build: { analyze: false, profile: process.argv.includes('--profile'),