You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.4 KiB
148 lines
3.4 KiB
const { createSchema, validate } = require('@vue/cli-shared-utils')
|
|
|
|
const schema = createSchema(joi => joi.object({
|
|
publicPath: joi.string().allow(''),
|
|
outputDir: joi.string(),
|
|
assetsDir: joi.string().allow(''),
|
|
indexPath: joi.string(),
|
|
filenameHashing: joi.boolean(),
|
|
runtimeCompiler: joi.boolean(),
|
|
transpileDependencies: joi.alternatives().try(
|
|
joi.boolean(),
|
|
joi.array()
|
|
),
|
|
productionSourceMap: joi.boolean(),
|
|
parallel: joi.alternatives().try(
|
|
joi.boolean(),
|
|
joi.number().integer()
|
|
),
|
|
devServer: joi.object(),
|
|
pages: joi.object().pattern(
|
|
/\w+/,
|
|
joi.alternatives().try(
|
|
joi.string().required(),
|
|
joi.array().items(joi.string().required()),
|
|
|
|
joi.object().keys({
|
|
entry: joi.alternatives().try(
|
|
joi.string().required(),
|
|
joi.array().items(joi.string().required())
|
|
).required()
|
|
}).unknown(true)
|
|
)
|
|
),
|
|
crossorigin: joi.string().valid('', 'anonymous', 'use-credentials'),
|
|
integrity: joi.boolean(),
|
|
|
|
// css
|
|
css: joi.object({
|
|
extract: joi.alternatives().try(joi.boolean(), joi.object()),
|
|
sourceMap: joi.boolean(),
|
|
loaderOptions: joi.object({
|
|
css: joi.object(),
|
|
sass: joi.object(),
|
|
scss: joi.object(),
|
|
less: joi.object(),
|
|
stylus: joi.object(),
|
|
postcss: joi.object()
|
|
})
|
|
}),
|
|
|
|
// webpack
|
|
chainWebpack: joi.func(),
|
|
configureWebpack: joi.alternatives().try(
|
|
joi.object(),
|
|
joi.func()
|
|
),
|
|
|
|
// known runtime options for built-in plugins
|
|
lintOnSave: joi.any().valid(true, false, 'error', 'warning', 'default'),
|
|
pwa: joi.object(),
|
|
|
|
// terser
|
|
terser: joi.object({
|
|
minify: joi.string().valid('terser', 'esbuild', 'swc', 'uglifyJs'),
|
|
terserOptions: joi.object()
|
|
}),
|
|
|
|
// 3rd party plugin options
|
|
pluginOptions: joi.object()
|
|
}))
|
|
|
|
exports.validate = (options, cb) => {
|
|
validate(options, schema, cb)
|
|
}
|
|
|
|
// #2110
|
|
// https://github.com/nodejs/node/issues/19022
|
|
// in some cases cpus() returns undefined, and may simply throw in the future
|
|
function hasMultipleCores () {
|
|
try {
|
|
return require('os').cpus().length > 1
|
|
} catch (e) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
exports.defaults = () => ({
|
|
// project deployment base
|
|
publicPath: '/',
|
|
|
|
// where to output built files
|
|
outputDir: 'dist',
|
|
|
|
// where to put static assets (js/css/img/font/...)
|
|
assetsDir: '',
|
|
|
|
// filename for index.html (relative to outputDir)
|
|
indexPath: 'index.html',
|
|
|
|
// whether filename will contain hash part
|
|
filenameHashing: true,
|
|
|
|
// boolean, use full build?
|
|
runtimeCompiler: false,
|
|
|
|
// whether to transpile all dependencies
|
|
transpileDependencies: false,
|
|
|
|
// sourceMap for production build?
|
|
productionSourceMap: !process.env.VUE_CLI_TEST,
|
|
|
|
// use thread-loader for babel & TS in production build
|
|
// enabled by default if the machine has more than 1 cores
|
|
parallel: hasMultipleCores(),
|
|
|
|
// multi-page config
|
|
pages: undefined,
|
|
|
|
// <script type="module" crossorigin="use-credentials">
|
|
// #1656, #1867, #2025
|
|
crossorigin: undefined,
|
|
|
|
// subresource integrity
|
|
integrity: false,
|
|
|
|
css: {
|
|
// extract: true,
|
|
// modules: false,
|
|
// sourceMap: false,
|
|
// loaderOptions: {}
|
|
},
|
|
|
|
// whether to use eslint-loader
|
|
lintOnSave: 'default',
|
|
|
|
devServer: {
|
|
/*
|
|
open: process.platform === 'darwin',
|
|
host: '0.0.0.0',
|
|
port: 8080,
|
|
https: false,
|
|
hotOnly: false,
|
|
proxy: null, // string | Object
|
|
before: app => {}
|
|
*/
|
|
}
|
|
})
|