Skip to content

Commit

Permalink
feat: re-introduce css.modules option
Browse files Browse the repository at this point in the history
BREAKING CHANGE: internal webpack rules for CSS have been changed.
  • Loading branch information
yyx990803 committed May 28, 2018
1 parent 6132dbe commit 1e98d96
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 12 deletions.
25 changes: 18 additions & 7 deletions packages/@vue/cli-service/__tests__/css.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@ const genConfig = (pkg = {}, env) => {
return config
}

const findRule = (config, lang, index = 2) => {
const findRule = (config, lang, index = 3) => {
const baseRule = config.module.rules.find(rule => {
return rule.test.test(`.${lang}`)
})
// all CSS rules have oneOf with two child rules, one for <style lang="module">
// and one for normal imports
// all CSS rules have 4 oneOf rules:
// - <style lang="module"> in Vue files
// - <style> in Vue files
// - *.modules.css imports from JS
// - *.css imports from JS
return baseRule.oneOf[index]
}

Expand Down Expand Up @@ -76,7 +79,13 @@ test('production defaults', () => {
})

test('CSS Modules rules', () => {
const config = genConfig()
const config = genConfig({
vue: {
css: {
modules: true
}
}
})
LANGS.forEach(lang => {
const expected = {
importLoaders: lang === 'css' ? 1 : 2, // no postcss-loader
Expand All @@ -85,10 +94,12 @@ test('CSS Modules rules', () => {
sourceMap: false,
modules: true
}
// module-query rules
// vue-modules rules
expect(findOptions(config, lang, 'css', 0)).toEqual(expected)
// module-ext rules
expect(findOptions(config, lang, 'css', 1)).toEqual(expected)
// normal-modules rules
expect(findOptions(config, lang, 'css', 2)).toEqual(expected)
// normal rules
expect(findOptions(config, lang, 'css', 3)).toEqual(expected)
})
})

Expand Down
16 changes: 11 additions & 5 deletions packages/@vue/cli-service/lib/config/css.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ module.exports = (api, options) => {
const getAssetPath = require('../util/getAssetPath')

const {
modules = false,
extract = true,
sourceMap = false,
localIdentName = '[name]_[local]_[hash:base64:5]',
Expand Down Expand Up @@ -43,15 +44,20 @@ module.exports = (api, options) => {
const baseRule = webpackConfig.module.rule(lang).test(test)

// rules for <style lang="module">
const modulesRule = baseRule.oneOf('modules-query').resourceQuery(/module/)
applyLoaders(modulesRule, true)
const vueModulesRule = baseRule.oneOf('vue-modules').resourceQuery(/module/)
applyLoaders(vueModulesRule, true)

// rules for <style>
const vueNormalRule = baseRule.oneOf('vue').resourceQuery(/\?vue/)
applyLoaders(vueNormalRule, false)

// rules for *.module.* files
const modulesExtRule = baseRule.oneOf('modules-ext').test(/\.module\.\w+$/)
applyLoaders(modulesExtRule, true)
const extModulesRule = baseRule.oneOf('normal-modules').test(/\.module\.\w+$/)
applyLoaders(extModulesRule, true)

// rules for normal CSS imports
const normalRule = baseRule.oneOf('normal')
applyLoaders(normalRule, false)
applyLoaders(normalRule, modules)

function applyLoaders (rule, modules) {
if (shouldExtract) {
Expand Down
2 changes: 2 additions & 0 deletions packages/@vue/cli-service/lib/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const schema = createSchema(joi => joi.object({

// css
css: joi.object({
modules: joi.boolean(),
localIdentName: joi.string(),
extract: joi.alternatives().try(joi.boolean(), joi.object()),
sourceMap: joi.boolean(),
Expand Down Expand Up @@ -66,6 +67,7 @@ exports.defaults = () => ({

css: {
// extract: true,
// modules: false,
// localIdentName: '[name]_[local]_[hash:base64:5]',
// sourceMap: false,
// loaderOptions: {}
Expand Down

0 comments on commit 1e98d96

Please sign in to comment.