/*!
|
* @nuxt/config v2.15.8 (c) 2016-2021
|
* Released under the MIT License
|
* Repository: https://github.com/nuxt/nuxt.js
|
* Website: https://nuxtjs.org
|
*/
|
'use strict';
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
const lodash = require('lodash');
|
const env = require('std-env');
|
const utils = require('@nuxt/utils');
|
const path = require('path');
|
const fs = require('fs');
|
const defu = require('defu');
|
const consola = require('consola');
|
const destr = require('destr');
|
const ufo = require('ufo');
|
const dotenv = require('dotenv');
|
const rc = require('rc9');
|
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
function _interopNamespace(e) {
|
if (e && e.__esModule) return e;
|
var n = Object.create(null);
|
if (e) {
|
Object.keys(e).forEach(function (k) {
|
if (k !== 'default') {
|
var d = Object.getOwnPropertyDescriptor(e, k);
|
Object.defineProperty(n, k, d.get ? d : {
|
enumerable: true,
|
get: function () {
|
return e[k];
|
}
|
});
|
}
|
});
|
}
|
n['default'] = e;
|
return Object.freeze(n);
|
}
|
|
const env__default = /*#__PURE__*/_interopDefaultLegacy(env);
|
const path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
const defu__default = /*#__PURE__*/_interopDefaultLegacy(defu);
|
const consola__default = /*#__PURE__*/_interopDefaultLegacy(consola);
|
const destr__default = /*#__PURE__*/_interopDefaultLegacy(destr);
|
const dotenv__default = /*#__PURE__*/_interopDefaultLegacy(dotenv);
|
const rc__namespace = /*#__PURE__*/_interopNamespace(rc);
|
|
const _app = () => ({
|
vue: {
|
config: {
|
silent: undefined, // = !dev
|
performance: undefined // = dev
|
}
|
},
|
|
vueMeta: null,
|
|
head: {
|
meta: [],
|
link: [],
|
style: [],
|
script: []
|
},
|
|
fetch: {
|
server: true,
|
client: true
|
},
|
|
plugins: [],
|
|
extendPlugins: null,
|
|
css: [],
|
|
layouts: {},
|
|
ErrorPage: null,
|
|
loading: {
|
color: 'black',
|
failedColor: 'red',
|
height: '2px',
|
throttle: 200,
|
duration: 5000,
|
continuous: false,
|
rtl: false,
|
css: true
|
},
|
|
loadingIndicator: 'default',
|
|
pageTransition: {
|
name: 'page',
|
mode: 'out-in',
|
appear: false,
|
appearClass: 'appear',
|
appearActiveClass: 'appear-active',
|
appearToClass: 'appear-to'
|
},
|
|
layoutTransition: {
|
name: 'layout',
|
mode: 'out-in'
|
},
|
|
features: {
|
store: true,
|
layouts: true,
|
meta: true,
|
middleware: true,
|
transitions: true,
|
deprecations: true,
|
validate: true,
|
asyncData: true,
|
fetch: true,
|
clientOnline: true,
|
clientPrefetch: true,
|
componentAliases: true,
|
componentClientOnly: true
|
}
|
});
|
|
const _common = () => ({
|
// Env
|
dev: Boolean(env__default['default'].dev),
|
test: Boolean(env__default['default'].test),
|
debug: undefined, // = dev
|
env: {},
|
|
createRequire: undefined,
|
|
// Target
|
target: utils.TARGETS.server,
|
|
// Rendering
|
ssr: true,
|
|
// Mode (deprecated)
|
mode: undefined,
|
|
// Modern
|
modern: undefined,
|
|
// Modules
|
modules: [],
|
buildModules: [],
|
_modules: [],
|
|
globalName: undefined,
|
globals: {
|
id: globalName => `__${globalName}`,
|
nuxt: globalName => `$${globalName}`,
|
context: globalName => `__${globalName.toUpperCase()}__`,
|
pluginPrefix: globalName => globalName,
|
readyCallback: globalName => `on${lodash.capitalize(globalName)}Ready`,
|
loadedCallback: globalName => `_on${lodash.capitalize(globalName)}Loaded`
|
},
|
|
// Server
|
serverMiddleware: [],
|
|
// Dirs and extensions
|
_nuxtConfigFile: undefined,
|
srcDir: undefined,
|
buildDir: '.nuxt',
|
modulesDir: [
|
'node_modules'
|
],
|
dir: {
|
assets: 'assets',
|
app: 'app',
|
layouts: 'layouts',
|
middleware: 'middleware',
|
pages: 'pages',
|
static: 'static',
|
store: 'store'
|
},
|
extensions: [],
|
styleExtensions: ['css', 'pcss', 'postcss', 'styl', 'stylus', 'scss', 'sass', 'less'],
|
alias: {},
|
|
// Ignores
|
ignoreOptions: undefined,
|
ignorePrefix: '-',
|
ignore: [
|
'**/*.test.*',
|
'**/*.spec.*'
|
],
|
|
// Watch
|
watch: [],
|
watchers: {
|
rewatchOnRawEvents: undefined,
|
webpack: {
|
aggregateTimeout: 1000
|
},
|
chokidar: {
|
ignoreInitial: true
|
}
|
},
|
|
// Editor
|
editor: undefined,
|
|
// Hooks
|
hooks: null,
|
|
// runtimeConfig
|
privateRuntimeConfig: {},
|
publicRuntimeConfig: {}
|
});
|
|
const build = () => ({
|
quiet: Boolean(env__default['default'].ci || env__default['default'].test),
|
analyze: false,
|
profile: process.argv.includes('--profile'),
|
extractCSS: false,
|
cssSourceMap: undefined,
|
ssr: undefined,
|
parallel: false,
|
cache: false,
|
standalone: false,
|
publicPath: '/_nuxt/',
|
serverURLPolyfill: 'url',
|
filenames: {
|
// { isDev, isClient, isServer }
|
app: ({ isDev, isModern }) => isDev ? `[name]${isModern ? '.modern' : ''}.js` : `[contenthash:7]${isModern ? '.modern' : ''}.js`,
|
chunk: ({ isDev, isModern }) => isDev ? `[name]${isModern ? '.modern' : ''}.js` : `[contenthash:7]${isModern ? '.modern' : ''}.js`,
|
css: ({ isDev }) => isDev ? '[name].css' : 'css/[contenthash:7].css',
|
img: ({ isDev }) => isDev ? '[path][name].[ext]' : 'img/[name].[contenthash:7].[ext]',
|
font: ({ isDev }) => isDev ? '[path][name].[ext]' : 'fonts/[name].[contenthash:7].[ext]',
|
video: ({ isDev }) => isDev ? '[path][name].[ext]' : 'videos/[name].[contenthash:7].[ext]'
|
},
|
loaders: {
|
file: { esModule: false },
|
fontUrl: { esModule: false, limit: 1000 },
|
imgUrl: { esModule: false, limit: 1000 },
|
pugPlain: {},
|
vue: {
|
transformAssetUrls: {
|
video: 'src',
|
source: 'src',
|
object: 'src',
|
embed: 'src'
|
}
|
},
|
css: {
|
esModule: false,
|
modules: {
|
compileType: 'icss'
|
}
|
},
|
cssModules: {
|
esModule: false,
|
modules: {
|
localIdentName: '[local]_[hash:base64:5]'
|
}
|
},
|
less: {},
|
sass: {
|
sassOptions: {
|
indentedSyntax: true
|
}
|
},
|
scss: {},
|
stylus: {},
|
vueStyle: {}
|
},
|
styleResources: {},
|
plugins: [],
|
terser: {},
|
hardSource: false,
|
aggressiveCodeRemoval: false,
|
optimizeCSS: undefined,
|
optimization: {
|
runtimeChunk: 'single',
|
minimize: undefined,
|
minimizer: undefined,
|
splitChunks: {
|
chunks: 'all',
|
automaticNameDelimiter: '/',
|
cacheGroups: {}
|
}
|
},
|
splitChunks: {
|
layouts: false,
|
pages: true,
|
commons: true
|
},
|
corejs: 'auto',
|
babel: {
|
configFile: false,
|
babelrc: false,
|
cacheDirectory: undefined
|
},
|
transpile: [], // Name of NPM packages to be transpiled
|
postcss: {
|
preset: {
|
// https://cssdb.org/#staging-process
|
stage: 2
|
}
|
},
|
html: {
|
minify: {
|
collapseBooleanAttributes: true,
|
decodeEntities: true,
|
minifyCSS: true,
|
minifyJS: true,
|
processConditionalComments: true,
|
removeEmptyAttributes: true,
|
removeRedundantAttributes: true,
|
trimCustomFragments: true,
|
useShortDoctype: true
|
}
|
},
|
|
template: undefined,
|
templates: [],
|
|
watch: [],
|
devMiddleware: {
|
// stats will be printed by webapckbar StateReporter
|
stats: 'none'
|
},
|
hotMiddleware: {},
|
|
stats: {
|
excludeAssets: [
|
/.map$/,
|
/index\..+\.html$/,
|
/vue-ssr-(client|modern)-manifest.json/
|
]
|
},
|
friendlyErrors: true,
|
additionalExtensions: [],
|
warningIgnoreFilters: [],
|
|
followSymlinks: false,
|
|
loadingScreen: {},
|
indicator: {
|
position: 'bottom-right',
|
backgroundColor: '#2E495E',
|
color: '#00C48D'
|
}
|
});
|
|
const messages = () => ({
|
loading: 'Loading...',
|
error_404: 'This page could not be found',
|
server_error: 'Server error',
|
nuxtjs: 'Nuxt',
|
back_to_home: 'Back to the home page',
|
server_error_details:
|
'An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.',
|
client_error: 'Error',
|
client_error_details:
|
'An error occurred while rendering the page. Check developer tools console for details.'
|
});
|
|
const modes = () => ({
|
[utils.MODES.universal]: {
|
build: {
|
ssr: true
|
},
|
render: {
|
ssr: true
|
}
|
},
|
[utils.MODES.spa]: {
|
build: {
|
ssr: false
|
},
|
render: {
|
ssr: false
|
}
|
}
|
});
|
|
// TODO: Refactor @nuxt/server related options into `server.js`
|
|
const render = () => ({
|
bundleRenderer: {
|
shouldPrefetch: () => false,
|
shouldPreload: (fileWithoutQuery, asType) => ['script', 'style'].includes(asType),
|
runInNewContext: undefined
|
},
|
crossorigin: undefined,
|
resourceHints: true,
|
ssr: undefined,
|
ssrLog: undefined,
|
http2: {
|
push: false,
|
shouldPush: null,
|
pushAssets: null
|
},
|
static: {
|
prefix: true
|
},
|
compressor: {
|
threshold: 0
|
},
|
etag: {
|
weak: false
|
},
|
csp: false,
|
dist: {
|
// Don't serve index.html template
|
index: false,
|
// 1 year in production
|
maxAge: '1y'
|
},
|
// https://github.com/nuxt/serve-placeholder
|
fallback: {
|
dist: {},
|
static: {
|
skipUnknown: true,
|
handlers: {
|
'.htm': false,
|
'.html': false
|
}
|
}
|
}
|
});
|
|
const router = () => ({
|
mode: 'history',
|
base: '/',
|
routes: [],
|
routeNameSplitter: '-',
|
middleware: [],
|
linkActiveClass: 'nuxt-link-active',
|
linkExactActiveClass: 'nuxt-link-exact-active',
|
linkPrefetchedClass: false,
|
extendRoutes: null,
|
scrollBehavior: null,
|
parseQuery: false,
|
stringifyQuery: false,
|
fallback: false,
|
prefetchLinks: true,
|
prefetchPayloads: true,
|
trailingSlash: undefined
|
});
|
|
const server = ({ env = {} } = {}) => ({
|
https: false,
|
port: env.NUXT_PORT ||
|
env.PORT ||
|
env.npm_package_config_nuxt_port ||
|
3000,
|
host: env.NUXT_HOST ||
|
env.HOST ||
|
env.npm_package_config_nuxt_host ||
|
'localhost',
|
socket: env.UNIX_SOCKET ||
|
env.npm_package_config_unix_socket,
|
timing: false
|
});
|
|
const cli = () => ({
|
badgeMessages: [],
|
bannerColor: 'green'
|
});
|
|
const generate = () => ({
|
dir: 'dist',
|
routes: [],
|
exclude: [],
|
concurrency: 500,
|
interval: 0,
|
subFolders: true,
|
fallback: '200.html',
|
crawler: true,
|
manifest: true,
|
cache: {
|
ignore: [],
|
globbyOptions: {
|
gitignore: true
|
}
|
},
|
staticAssets: {
|
base: undefined, // Default: "/_nuxt/static:
|
versionBase: undefined, // Default: "_nuxt/static/{version}""
|
dir: 'static',
|
version: undefined // Default: "{timeStampSec}"
|
}
|
});
|
|
const defaultNuxtConfigFile = 'nuxt.config';
|
|
function getDefaultNuxtConfig (options = {}) {
|
if (!options.env) {
|
options.env = process.env;
|
}
|
|
return {
|
..._app(),
|
..._common(),
|
build: build(),
|
messages: messages(),
|
modes: modes(),
|
render: render(),
|
router: router(),
|
server: server(options),
|
cli: cli(),
|
generate: generate()
|
}
|
}
|
|
function getNuxtConfig (_options) {
|
// Prevent duplicate calls
|
if (_options.__normalized__) {
|
return _options
|
}
|
|
// Clone options to prevent unwanted side-effects
|
const options = Object.assign({}, _options);
|
options.__normalized__ = true;
|
|
// Normalize options
|
if (options.loading === true) {
|
delete options.loading;
|
}
|
|
if (
|
options.router &&
|
options.router.middleware &&
|
!Array.isArray(options.router.middleware)
|
) {
|
options.router.middleware = [options.router.middleware];
|
}
|
|
if (options.router && typeof options.router.base === 'string') {
|
options._routerBaseSpecified = true;
|
}
|
|
// TODO: Remove for Nuxt 3
|
// router.scrollBehavior -> app/router.scrollBehavior.js
|
if (options.router && typeof options.router.scrollBehavior !== 'undefined') {
|
consola__default['default'].warn('`router.scrollBehavior` property is deprecated in favor of using `~/app/router.scrollBehavior.js` file, learn more: https://nuxtjs.org/api/configuration-router#scrollbehavior');
|
}
|
|
// TODO: Remove for Nuxt 3
|
// transition -> pageTransition
|
if (typeof options.transition !== 'undefined') {
|
consola__default['default'].warn('`transition` property is deprecated in favor of `pageTransition` and will be removed in Nuxt 3');
|
options.pageTransition = options.transition;
|
delete options.transition;
|
}
|
|
if (typeof options.pageTransition === 'string') {
|
options.pageTransition = { name: options.pageTransition };
|
}
|
|
if (typeof options.layoutTransition === 'string') {
|
options.layoutTransition = { name: options.layoutTransition };
|
}
|
|
if (typeof options.extensions === 'string') {
|
options.extensions = [options.extensions];
|
}
|
|
options.globalName = (utils.isNonEmptyString(options.globalName) && /^[a-zA-Z]+$/.test(options.globalName))
|
? options.globalName.toLowerCase()
|
// use `` for preventing replacing to nuxt-edge
|
: `nuxt`;
|
|
// Resolve rootDir
|
options.rootDir = utils.isNonEmptyString(options.rootDir) ? path__default['default'].resolve(options.rootDir) : process.cwd();
|
|
// Apply defaults by ${buildDir}/dist/build.config.js
|
// TODO: Unsafe operation.
|
// const buildDir = options.buildDir || defaults.buildDir
|
// const buildConfig = resolve(options.rootDir, buildDir, 'build.config.js')
|
// if (existsSync(buildConfig)) {
|
// defaultsDeep(options, require(buildConfig))
|
// }
|
|
// Apply defaults
|
const nuxtConfig = getDefaultNuxtConfig();
|
|
nuxtConfig.build._publicPath = nuxtConfig.build.publicPath;
|
|
// Fall back to default if publicPath is falsy
|
if (options.build && !options.build.publicPath) {
|
options.build.publicPath = undefined;
|
}
|
|
lodash.defaultsDeep(options, nuxtConfig);
|
|
// Target
|
options.target = options.target || 'server';
|
if (!Object.values(utils.TARGETS).includes(options.target)) {
|
consola__default['default'].warn(`Unknown target: ${options.target}. Falling back to server`);
|
options.target = 'server';
|
}
|
|
// Deprecate Mode
|
if (options.mode) {
|
if ((options.mode === utils.MODES.universal && options.ssr) || (options.mode === utils.MODES.spa && !options.ssr)) {
|
consola__default['default'].warn('`mode` option is deprecated. You can safely remove it from `nuxt.config`');
|
} else {
|
consola__default['default'].warn('`mode` option is deprecated. Please use `ssr: true` for universal mode or `ssr: false` for spa mode and remove `mode` from `nuxt.config`');
|
}
|
} else {
|
// For backward compat we need default value
|
options.mode = utils.MODES.universal;
|
}
|
|
// SSR root option
|
if (options.ssr === false) {
|
options.mode = utils.MODES.spa;
|
}
|
|
// Apply mode preset
|
const modePreset = options.modes[options.mode || utils.MODES.universal];
|
|
if (!modePreset) {
|
consola__default['default'].warn(`Unknown mode: ${options.mode}. Falling back to ${utils.MODES.universal}`);
|
}
|
lodash.defaultsDeep(options, modePreset || options.modes[utils.MODES.universal]);
|
|
// Sanitize router.base
|
options.router.base = ufo.withTrailingSlash(ufo.normalizeURL(options.router.base));
|
|
// Legacy support for export
|
if (options.export) {
|
consola__default['default'].warn('export option is deprecated and will be removed in a future version! Please switch to generate');
|
options.generate = defu__default['default'](options.export, options.generate);
|
}
|
exports.export = options.generate;
|
|
// Check srcDir and generate.dir existence
|
const hasSrcDir = utils.isNonEmptyString(options.srcDir);
|
const hasGenerateDir = utils.isNonEmptyString(options.generate.dir);
|
|
// Resolve srcDir
|
options.srcDir = hasSrcDir
|
? path__default['default'].resolve(options.rootDir, options.srcDir)
|
: options.rootDir;
|
|
// Resolve buildDir
|
options.buildDir = path__default['default'].resolve(options.rootDir, options.buildDir);
|
|
// Aliases
|
const { rootDir, srcDir, dir: { assets: assetsDir, static: staticDir } } = options;
|
options.alias = {
|
'~~': rootDir,
|
'@@': rootDir,
|
'~': srcDir,
|
'@': srcDir,
|
[assetsDir]: path__default['default'].join(srcDir, assetsDir),
|
[staticDir]: path__default['default'].join(srcDir, staticDir),
|
...options.alias
|
};
|
|
// Default value for _nuxtConfigFile
|
if (!options._nuxtConfigFile) {
|
options._nuxtConfigFile = path__default['default'].resolve(options.rootDir, `${defaultNuxtConfigFile}.js`);
|
}
|
|
if (!options._nuxtConfigFiles) {
|
options._nuxtConfigFiles = [
|
options._nuxtConfigFile
|
];
|
}
|
|
// Watch for config file changes
|
options.watch.push(...options._nuxtConfigFiles);
|
|
// Protect rootDir against buildDir
|
utils.guardDir(options, 'rootDir', 'buildDir');
|
|
if (hasGenerateDir) {
|
// Resolve generate.dir
|
options.generate.dir = path__default['default'].resolve(options.rootDir, options.generate.dir);
|
|
// Protect rootDir against buildDir
|
utils.guardDir(options, 'rootDir', 'generate.dir');
|
}
|
|
if (hasSrcDir) {
|
// Protect srcDir against buildDir
|
utils.guardDir(options, 'srcDir', 'buildDir');
|
|
if (hasGenerateDir) {
|
// Protect srcDir against generate.dir
|
utils.guardDir(options, 'srcDir', 'generate.dir');
|
}
|
}
|
|
// Populate modulesDir
|
options.modulesDir = lodash.uniq(
|
utils.getMainModule().paths.concat(
|
[].concat(options.modulesDir).map(dir => path__default['default'].resolve(options.rootDir, dir))
|
)
|
);
|
|
const mandatoryExtensions = ['js', 'mjs'];
|
|
options.extensions = mandatoryExtensions
|
.filter(ext => !options.extensions.includes(ext))
|
.concat(options.extensions);
|
|
// If app.html is defined, set the template path to the user template
|
if (options.appTemplatePath === undefined) {
|
options.appTemplatePath = path__default['default'].resolve(options.buildDir, 'views/app.template.html');
|
if (fs__default['default'].existsSync(path__default['default'].join(options.srcDir, 'app.html'))) {
|
options.appTemplatePath = path__default['default'].join(options.srcDir, 'app.html');
|
}
|
} else {
|
options.appTemplatePath = path__default['default'].resolve(options.srcDir, options.appTemplatePath);
|
}
|
|
options.build.publicPath = options.build.publicPath.replace(/([^/])$/, '$1/');
|
options.build._publicPath = options.build._publicPath.replace(/([^/])$/, '$1/');
|
|
// Ignore publicPath on dev
|
if (options.dev && utils.isUrl(options.build.publicPath)) {
|
options.build.publicPath = options.build._publicPath;
|
}
|
|
// If store defined, update store options to true unless explicitly disabled
|
if (
|
options.store !== false &&
|
fs__default['default'].existsSync(path__default['default'].join(options.srcDir, options.dir.store)) &&
|
fs__default['default'].readdirSync(path__default['default'].join(options.srcDir, options.dir.store))
|
.find(filename => filename !== 'README.md' && filename[0] !== '.')
|
) {
|
options.store = true;
|
}
|
|
// SPA loadingIndicator
|
if (options.loadingIndicator) {
|
// Normalize loadingIndicator
|
if (!utils.isPureObject(options.loadingIndicator)) {
|
options.loadingIndicator = { name: options.loadingIndicator };
|
}
|
|
// Apply defaults
|
options.loadingIndicator = Object.assign(
|
{
|
name: 'default',
|
color: (options.loading && options.loading.color) || '#D3D3D3',
|
color2: '#F5F5F5',
|
background: (options.manifest && options.manifest.theme_color) || 'white',
|
dev: options.dev,
|
loading: options.messages.loading
|
},
|
options.loadingIndicator
|
);
|
}
|
|
// Debug errors
|
if (options.debug === undefined) {
|
options.debug = options.dev;
|
}
|
|
// Validate that etag.hash is a function, if not unset it
|
if (options.render.etag) {
|
const { hash } = options.render.etag;
|
if (hash) {
|
const isFn = typeof hash === 'function';
|
if (!isFn) {
|
options.render.etag.hash = undefined;
|
|
if (options.dev) {
|
consola__default['default'].warn(`render.etag.hash should be a function, received ${typeof hash} instead`);
|
}
|
}
|
}
|
}
|
|
// Apply default hash to CSP option
|
if (options.render.csp) {
|
options.render.csp = defu__default['default'](options.render.csp, {
|
hashAlgorithm: 'sha256',
|
allowedSources: undefined,
|
policies: undefined,
|
addMeta: Boolean(options.target === utils.TARGETS.static),
|
unsafeInlineCompatibility: false,
|
reportOnly: options.debug
|
});
|
|
// TODO: Remove this if statement in Nuxt 3, we will stop supporting this typo (more on: https://github.com/nuxt/nuxt.js/pull/6583)
|
if (options.render.csp.unsafeInlineCompatiblity) {
|
consola__default['default'].warn('Using `unsafeInlineCompatiblity` is deprecated and will be removed in Nuxt 3. Use `unsafeInlineCompatibility` instead.');
|
options.render.csp.unsafeInlineCompatibility = options.render.csp.unsafeInlineCompatiblity;
|
delete options.render.csp.unsafeInlineCompatiblity;
|
}
|
}
|
|
// cssSourceMap
|
if (options.build.cssSourceMap === undefined) {
|
options.build.cssSourceMap = options.dev;
|
}
|
|
const babelConfig = options.build.babel;
|
// babel cacheDirectory
|
if (babelConfig.cacheDirectory === undefined) {
|
babelConfig.cacheDirectory = options.dev;
|
}
|
|
// TODO: remove this warn in Nuxt 3
|
if (Array.isArray(babelConfig.presets)) {
|
const warnPreset = (presetName) => {
|
const oldPreset = '@nuxtjs/babel-preset-app';
|
const newPreset = '@nuxt/babel-preset-app';
|
if (presetName.includes(oldPreset)) {
|
presetName = presetName.replace(oldPreset, newPreset);
|
consola__default['default'].warn('@nuxtjs/babel-preset-app has been deprecated, please use @nuxt/babel-preset-app.');
|
}
|
return presetName
|
};
|
babelConfig.presets = babelConfig.presets.map((preset) => {
|
const hasOptions = Array.isArray(preset);
|
if (hasOptions) {
|
preset[0] = warnPreset(preset[0]);
|
} else if (typeof preset === 'string') {
|
preset = warnPreset(preset);
|
}
|
return preset
|
});
|
}
|
|
// Vue config
|
const vueConfig = options.vue.config;
|
|
if (vueConfig.silent === undefined) {
|
vueConfig.silent = !options.dev;
|
}
|
if (vueConfig.performance === undefined) {
|
vueConfig.performance = options.dev;
|
}
|
|
// merge custom env with variables
|
const eligibleEnvVariables = lodash.pick(process.env, Object.keys(process.env).filter(k => k.startsWith('NUXT_ENV_')));
|
Object.assign(options.env, eligibleEnvVariables);
|
|
// Normalize ignore
|
options.ignore = options.ignore ? [].concat(options.ignore) : [];
|
|
// Append ignorePrefix glob to ignore
|
if (typeof options.ignorePrefix === 'string') {
|
options.ignore.push(`**/${options.ignorePrefix}*.*`);
|
}
|
|
// Compression middleware legacy
|
if (options.render.gzip) {
|
consola__default['default'].warn('render.gzip is deprecated and will be removed in a future version! Please switch to render.compressor');
|
options.render.compressor = options.render.gzip;
|
delete options.render.gzip;
|
}
|
|
// If no server-side rendering, add appear true transition
|
if (options.render.ssr === false && options.pageTransition) {
|
options.pageTransition.appear = true;
|
}
|
|
options.render.ssrLog = options.dev
|
? options.render.ssrLog === undefined || options.render.ssrLog
|
: false;
|
|
// We assume the SPA fallback path is 404.html (for GitHub Pages, Surge, etc.)
|
if (options.generate.fallback === true) {
|
options.generate.fallback = '404.html';
|
}
|
|
if (options.build.stats === 'none' || options.build.quiet === true) {
|
options.build.stats = false;
|
}
|
|
// Vendor backward compatibility with nuxt 1.x
|
if (typeof options.build.vendor !== 'undefined') {
|
delete options.build.vendor;
|
consola__default['default'].warn('vendor has been deprecated due to webpack4 optimization');
|
}
|
|
// Disable CSS extraction due to incompatibility with thread-loader
|
if (options.build.extractCSS && options.build.parallel) {
|
options.build.parallel = false;
|
consola__default['default'].warn('extractCSS cannot work with parallel build due to limited work pool in thread-loader');
|
}
|
|
// build.extractCSS.allChunks has no effect
|
if (typeof options.build.extractCSS.allChunks !== 'undefined') {
|
consola__default['default'].warn('build.extractCSS.allChunks has no effect from v2.0.0. Please use build.optimization.splitChunks settings instead.');
|
}
|
|
// devModules has been renamed to buildModules
|
if (typeof options.devModules !== 'undefined') {
|
consola__default['default'].warn('`devModules` has been renamed to `buildModules` and will be removed in Nuxt 3.');
|
options.buildModules.push(...options.devModules);
|
delete options.devModules;
|
}
|
|
// Enable minimize for production builds
|
if (options.build.optimization.minimize === undefined) {
|
options.build.optimization.minimize = !options.dev;
|
}
|
|
// Enable optimizeCSS only when extractCSS is enabled
|
if (options.build.optimizeCSS === undefined) {
|
options.build.optimizeCSS = options.build.extractCSS ? {} : false;
|
}
|
|
const { loaders } = options.build;
|
const vueLoader = loaders.vue;
|
if (vueLoader.productionMode === undefined) {
|
vueLoader.productionMode = !options.dev;
|
}
|
const styleLoaders = [
|
'css', 'cssModules', 'less',
|
'sass', 'scss', 'stylus', 'vueStyle'
|
];
|
for (const name of styleLoaders) {
|
const loader = loaders[name];
|
if (loader && loader.sourceMap === undefined) {
|
loader.sourceMap = Boolean(options.build.cssSourceMap);
|
}
|
}
|
|
options.build.transpile = [].concat(options.build.transpile || []);
|
|
if (options.build.quiet === true) {
|
consola__default['default'].level = 0;
|
}
|
|
// Use runInNewContext for dev mode by default
|
const { bundleRenderer } = options.render;
|
if (typeof bundleRenderer.runInNewContext === 'undefined') {
|
bundleRenderer.runInNewContext = options.dev;
|
}
|
|
// TODO: Remove this if statement in Nuxt 3
|
if (options.build.crossorigin) {
|
consola__default['default'].warn('Using `build.crossorigin` is deprecated and will be removed in Nuxt 3. Please use `render.crossorigin` instead.');
|
options.render.crossorigin = options.build.crossorigin;
|
delete options.build.crossorigin;
|
}
|
|
const { timing } = options.server;
|
if (timing) {
|
options.server.timing = { total: true, ...timing };
|
}
|
|
if (utils.isPureObject(options.serverMiddleware)) {
|
options.serverMiddleware = Object.entries(options.serverMiddleware)
|
.map(([path, handler]) => ({ path, handler }));
|
}
|
|
// App config (internal for nuxt2 at this stage)
|
const useCDN = utils.isUrl(options.build.publicPath) && !options.dev;
|
const isRelativePublicPath = ufo.isRelative(options.build.publicPath);
|
|
options.app = defu__default['default'](options.app, {
|
basePath: options.router.base,
|
assetsPath: isRelativePublicPath ? options.build.publicPath : useCDN ? '/' : ufo.joinURL(options.router.base, options.build.publicPath),
|
cdnURL: useCDN ? options.build.publicPath : null
|
});
|
// Expose app config to $config._app
|
options.publicRuntimeConfig = options.publicRuntimeConfig || {};
|
options.publicRuntimeConfig._app = options.app;
|
|
// Generate staticAssets
|
const { staticAssets } = options.generate;
|
if (!staticAssets.version) {
|
staticAssets.version = String(Math.round(Date.now() / 1000));
|
}
|
if (!staticAssets.base) {
|
staticAssets.base = ufo.joinURL(options.app.assetsPath, staticAssets.dir);
|
}
|
if (!staticAssets.versionBase) {
|
staticAssets.versionBase = ufo.joinURL(staticAssets.base, staticAssets.version);
|
}
|
|
// createRequire
|
const isJest = typeof jest !== 'undefined';
|
const defaultCreateRequire = isJest ? 'native' : 'jiti';
|
|
options.createRequire = process.env.NUXT_CREATE_REQUIRE || options.createRequire || defaultCreateRequire;
|
|
if (options.createRequire === 'native' || options.createRequire === 'jiti') {
|
const useJiti = options.createRequire === 'jiti';
|
options.createRequire = p => utils.createRequire(typeof p === 'string' ? p : p.filename, useJiti);
|
} else if (typeof options.createRequire !== 'function') {
|
throw new TypeError(
|
`Unsupported createRequire value ${options.createRequire}! Possible values: "native", "jiti", <Function>`
|
)
|
}
|
|
// Indicator
|
// Change boolean true to default nuxt value
|
if (options.build.indicator === true) {
|
options.build.indicator = nuxtConfig.build.indicator;
|
}
|
|
// ----- Builtin modules -----
|
|
// Loading screen
|
// Force disable for production and programmatic users
|
if (!options.dev || !options._cli || !utils.getPKG('@nuxt/loading-screen')) {
|
options.build.loadingScreen = false;
|
}
|
if (options.build.loadingScreen) {
|
options._modules.push(['@nuxt/loading-screen', options.build.loadingScreen]);
|
} else {
|
// When loadingScreen is disabled we should also disable build indicator
|
options.build.indicator = false;
|
}
|
|
// Components Module
|
if (!options._start && utils.getPKG('@nuxt/components')) {
|
options._modules.push('@nuxt/components');
|
}
|
|
// Nuxt Telemetry
|
if (
|
options.telemetry !== false &&
|
!options.test &&
|
!destr__default['default'](process.env.NUXT_TELEMETRY_DISABLED) &&
|
utils.getPKG('@nuxt/telemetry')
|
) {
|
options._modules.push('@nuxt/telemetry');
|
}
|
|
return options
|
}
|
|
async function loadNuxtConfig ({
|
rootDir = '.',
|
envConfig = {},
|
configFile = defaultNuxtConfigFile,
|
configContext = {},
|
configOverrides = {}
|
} = {}) {
|
rootDir = path__default['default'].resolve(rootDir);
|
|
const _require = utils.createRequire(rootDir, true);
|
|
let options = {};
|
|
try {
|
configFile = _require.resolve(path__default['default'].resolve(rootDir, configFile));
|
} catch (e) {
|
if (e.code !== 'MODULE_NOT_FOUND') {
|
throw (e)
|
} else if (configFile !== defaultNuxtConfigFile) {
|
consola__default['default'].fatal('Config file not found: ' + configFile);
|
}
|
// Skip configFile if cannot resolve
|
configFile = undefined;
|
}
|
|
// Load env
|
envConfig = {
|
dotenv: '.env',
|
env: process.env,
|
expand: true,
|
...envConfig
|
};
|
|
const env = loadEnv(envConfig, rootDir);
|
|
// Fill process.env so it is accessible in nuxt.config
|
for (const key in env) {
|
if (!key.startsWith('_') && envConfig.env[key] === undefined) {
|
envConfig.env[key] = env[key];
|
}
|
}
|
|
if (configFile) {
|
// Clear cache
|
utils.clearRequireCache(configFile);
|
options = _require(configFile) || {};
|
if (options.default) {
|
options = options.default;
|
}
|
|
if (typeof options === 'function') {
|
try {
|
options = await options(configContext);
|
if (options.default) {
|
options = options.default;
|
}
|
} catch (error) {
|
consola__default['default'].error(error);
|
consola__default['default'].fatal('Error while fetching async configuration');
|
}
|
}
|
|
// Don't mutate options export
|
options = { ...options };
|
|
// Keep _nuxtConfigFile for watching
|
options._nuxtConfigFile = configFile;
|
|
// Keep all related files for watching
|
options._nuxtConfigFiles = Array.from(utils.scanRequireTree(configFile));
|
if (!options._nuxtConfigFiles.includes(configFile)) {
|
options._nuxtConfigFiles.unshift(configFile);
|
}
|
}
|
|
if (typeof options.rootDir !== 'string') {
|
options.rootDir = rootDir;
|
}
|
|
// Load Combine configs
|
// Priority: configOverrides > nuxtConfig > .nuxtrc > .nuxtrc (global)
|
options = defu__default['default'](
|
configOverrides,
|
options,
|
rc__namespace.read({ name: '.nuxtrc', dir: options.rootDir }),
|
rc__namespace.readUser('.nuxtrc')
|
);
|
|
// Load env to options._env
|
options._env = env;
|
options._envConfig = envConfig;
|
if (configContext) { configContext.env = env; }
|
|
// Expand and interpolate runtimeConfig from _env
|
if (envConfig.expand) {
|
for (const c of ['publicRuntimeConfig', 'privateRuntimeConfig']) {
|
if (options[c]) {
|
if (typeof options[c] === 'function') {
|
options[c] = options[c](env);
|
}
|
expand(options[c], env, destr__default['default']);
|
}
|
}
|
}
|
|
return options
|
}
|
|
function loadEnv (envConfig, rootDir = process.cwd()) {
|
const env = Object.create(null);
|
|
// Read dotenv
|
if (envConfig.dotenv) {
|
envConfig.dotenv = path__default['default'].resolve(rootDir, envConfig.dotenv);
|
if (fs__default['default'].existsSync(envConfig.dotenv)) {
|
const parsed = dotenv__default['default'].parse(fs__default['default'].readFileSync(envConfig.dotenv, 'utf-8'));
|
Object.assign(env, parsed);
|
}
|
}
|
|
// Apply process.env
|
if (!envConfig.env._applied) {
|
Object.assign(env, envConfig.env);
|
envConfig.env._applied = true;
|
}
|
|
// Interpolate env
|
if (envConfig.expand) {
|
expand(env);
|
}
|
|
return env
|
}
|
|
// Based on https://github.com/motdotla/dotenv-expand
|
function expand (target, source = {}, parse = v => v) {
|
function getValue (key) {
|
// Source value 'wins' over target value
|
return source[key] !== undefined ? source[key] : target[key]
|
}
|
|
function interpolate (value, parents = []) {
|
if (typeof value !== 'string') {
|
return value
|
}
|
const matches = value.match(/(.?\${?(?:[a-zA-Z0-9_:]+)?}?)/g) || [];
|
return parse(matches.reduce((newValue, match) => {
|
const parts = /(.?)\${?([a-zA-Z0-9_:]+)?}?/g.exec(match);
|
const prefix = parts[1];
|
|
let value, replacePart;
|
|
if (prefix === '\\') {
|
replacePart = parts[0];
|
value = replacePart.replace('\\$', '$');
|
} else {
|
const key = parts[2];
|
replacePart = parts[0].substring(prefix.length);
|
|
// Avoid recursion
|
if (parents.includes(key)) {
|
consola__default['default'].warn(`Please avoid recursive environment variables ( loop: ${parents.join(' > ')} > ${key} )`);
|
return ''
|
}
|
|
value = getValue(key);
|
|
// Resolve recursive interpolations
|
value = interpolate(value, [...parents, key]);
|
}
|
|
return value !== undefined ? newValue.replace(replacePart, value) : newValue
|
}, value))
|
}
|
|
for (const key in target) {
|
target[key] = interpolate(getValue(key));
|
}
|
}
|
|
exports.defaultNuxtConfigFile = defaultNuxtConfigFile;
|
exports.getDefaultNuxtConfig = getDefaultNuxtConfig;
|
exports.getNuxtConfig = getNuxtConfig;
|
exports.loadNuxtConfig = loadNuxtConfig;
|