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.
		
		
		
		
			
				
					144 lines
				
				3.3 KiB
			
		
		
			
		
	
	
					144 lines
				
				3.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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 => {}
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 |