123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- 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.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({
- // TODO: deprecate this after joi 16 release
- modules: joi.boolean(),
- requireModuleExtension: joi.boolean(),
- 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(),
- // 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,
- // deps to transpile
- transpileDependencies: [
- /* string or regex */
- ],
- // 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 => {}
- */
- }
- })
|