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