Skip to content

Commit a8df1df

Browse files
authored
fix: fix css.loaderOptions.css.modules default values (vuejs#4363)
fixes vuejs#4357
1 parent 710d08b commit a8df1df

File tree

4 files changed

+21
-30
lines changed

4 files changed

+21
-30
lines changed

docs/guide/css.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,13 @@ module.exports = {
108108
css: {
109109
loaderOptions: {
110110
css: {
111-
localIdentName: '[name]-[hash]',
112-
camelCase: 'only'
111+
// Note: the following config format is different between Vue CLI v4 and v3
112+
// For Vue CLI v3 users, please refer to css-loader v1 documentations
113+
// https://github.com/webpack-contrib/css-loader/tree/v1.0.1
114+
modules: {
115+
localIdentName: '[name]-[hash]',
116+
localsConvention: 'camelCaseOnly'
117+
}
113118
}
114119
}
115120
}

packages/@vue/cli-service/lib/Service.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -370,15 +370,6 @@ module.exports = class Service {
370370
resolved.baseUrl = resolved.publicPath
371371
removeSlash(resolved, 'outputDir')
372372

373-
// deprecation warning
374-
// TODO remove in final release
375-
if (resolved.css && resolved.css.localIdentName) {
376-
warn(
377-
`css.localIdentName has been deprecated. ` +
378-
`All css-loader options (except "modules") are now supported via css.loaderOptions.css.`
379-
)
380-
}
381-
382373
// validate options
383374
validate(resolved, msg => {
384375
error(

packages/@vue/cli-service/lib/config/css.js

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const findExisting = (context, files) => {
99
}
1010
}
1111

12-
module.exports = (api, options) => {
12+
module.exports = (api, rootOptions) => {
1313
api.chainWebpack(webpackConfig => {
1414
const getAssetPath = require('../util/getAssetPath')
1515
const shadowMode = !!process.env.VUE_CLI_CSS_SHADOW_MODE
@@ -22,16 +22,15 @@ module.exports = (api, options) => {
2222
} catch (e) {}
2323

2424
const {
25-
modules = false,
2625
extract = isProd,
2726
sourceMap = false,
2827
loaderOptions = {}
29-
} = options.css || {}
28+
} = rootOptions.css || {}
3029

3130
const shouldExtract = extract !== false && !shadowMode
3231
const filename = getAssetPath(
33-
options,
34-
`css/[name]${options.filenameHashing ? '.[contenthash:8]' : ''}.css`
32+
rootOptions,
33+
`css/[name]${rootOptions.filenameHashing ? '.[contenthash:8]' : ''}.css`
3534
)
3635
const extractOptions = Object.assign({
3736
filename,
@@ -71,7 +70,7 @@ module.exports = (api, options) => {
7170
cssDeclarationSorter: false
7271
}]
7372
}
74-
if (options.productionSourceMap && sourceMap) {
73+
if (rootOptions.productionSourceMap && sourceMap) {
7574
cssnanoOptions.map = { inline: false }
7675
}
7776

@@ -92,9 +91,10 @@ module.exports = (api, options) => {
9291

9392
// rules for normal CSS imports
9493
const normalRule = baseRule.oneOf('normal')
95-
applyLoaders(normalRule, modules)
94+
const treatAllAsModules = !!(rootOptions.css && rootOptions.css.modules)
95+
applyLoaders(normalRule, treatAllAsModules)
9696

97-
function applyLoaders (rule, modules) {
97+
function applyLoaders (rule, isCssModule) {
9898
if (shouldExtract) {
9999
rule
100100
.use('extract-css-loader')
@@ -122,15 +122,11 @@ module.exports = (api, options) => {
122122
)
123123
}, loaderOptions.css)
124124

125-
if (modules) {
126-
const {
127-
localIdentName = '[name]_[local]_[hash:base64:5]'
128-
} = loaderOptions.css || {}
129-
Object.assign(cssLoaderOptions, {
130-
modules: {
131-
localIdentName
132-
}
133-
})
125+
if (isCssModule) {
126+
cssLoaderOptions.modules = {
127+
localIdentName: '[name]_[local]_[hash:base64:5]',
128+
...cssLoaderOptions.modules
129+
}
134130
}
135131

136132
rule
@@ -186,7 +182,7 @@ module.exports = (api, options) => {
186182
webpackConfig
187183
.plugin('optimize-css')
188184
.use(require('@intervolga/optimize-cssnano-plugin'), [{
189-
sourceMap: options.productionSourceMap && sourceMap,
185+
sourceMap: rootOptions.productionSourceMap && sourceMap,
190186
cssnanoOptions
191187
}])
192188
}

packages/@vue/cli-service/lib/options.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ exports.defaults = () => ({
122122
css: {
123123
// extract: true,
124124
// modules: false,
125-
// localIdentName: '[name]_[local]_[hash:base64:5]',
126125
// sourceMap: false,
127126
// loaderOptions: {}
128127
},

0 commit comments

Comments
 (0)