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.
147 lines
3.4 KiB
147 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 => {} |
|
*/ |
|
} |
|
})
|
|
|