mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-01-26 09:09:05 -06:00
closes #4376 Since css-loader v3, custom CSS Modules configurations are under the `modules` field. So when a user customizes these configurations, the `modules` feature is automatically enabled for all css files. So we must require the user's explicit consensus or disagreement on whether these rules apply to all CSS files or not.
144 lines
3.3 KiB
JavaScript
144 lines
3.3 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.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 => {}
|
|
*/
|
|
}
|
|
})
|