Skip to content

Commit bd581dc

Browse files
committed
generate nicer looking scoped CSS ids
1 parent 6c6c3e8 commit bd581dc

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

lib/gen-id.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// utility for generating a uid for each component file
2+
// used in scoped CSS rewriting
3+
var fileUid = 1
4+
var fileRegistry = Object.create(null)
5+
6+
module.exports = function genId (file) {
7+
return fileRegistry[file] || (fileRegistry[file] = fileUid++)
8+
}

lib/loader.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
var loaderUtils = require('loader-utils')
22
var assign = require('object-assign')
33
var parse = require('./parser')
4-
var hash = require('hash-sum')
54
var path = require('path')
65
var normalize = require('./normalize')
6+
var genId = require('./gen-id')
77

88
// internal lib loaders
99
var selectorPath = normalize.lib('selector')
@@ -37,7 +37,7 @@ module.exports = function (content) {
3737
var query = loaderUtils.parseQuery(this.query)
3838
var filePath = this.resourcePath
3939
var fileName = path.basename(filePath)
40-
var moduleId = '_v-' + hash(filePath)
40+
var moduleId = 'data-v-' + genId(filePath)
4141
var styleRewriter = styleRewriterPath + '?id=' + moduleId
4242

4343
var needCssSourceMap =

test/test.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var webpack = require('webpack')
66
var jsdom = require('jsdom')
77
var expect = require('chai').expect
88
var rimraf = require('rimraf')
9-
var hash = require('hash-sum')
9+
var genId = require('../lib/gen-id')
1010
var SourceMapConsumer = require('source-map').SourceMapConsumer
1111
var ExtractTextPlugin = require("extract-text-webpack-plugin")
1212
var compiler = require('vue-template-compiler')
@@ -19,7 +19,7 @@ function assertRenderFn (options, template) {
1919
describe('vue-loader', function () {
2020
var testHTML = '<!DOCTYPE html><html><head></head><body></body></html>'
2121
var outputDir = path.resolve(__dirname, './output')
22-
var loaderPath = 'expose?vueModule!'+path.resolve(__dirname, '../')
22+
var loaderPath = 'expose?vueModule!' + path.resolve(__dirname, '../')
2323
var globalConfig = {
2424
output: {
2525
path: outputDir,
@@ -108,7 +108,7 @@ describe('vue-loader', function () {
108108
entry: './test/fixtures/scoped-css.vue'
109109
}, function (window) {
110110
var module = window.vueModule
111-
var id = '_v-' + hash(require.resolve('./fixtures/scoped-css.vue'))
111+
var id = 'data-v-' + genId(require.resolve('./fixtures/scoped-css.vue'))
112112
expect(module._scopeId).to.equal(id)
113113
assertRenderFn(module,
114114
'<div>' +
@@ -133,7 +133,7 @@ describe('vue-loader', function () {
133133
var styles = window.document.querySelectorAll('style')
134134
expect(styles[0].textContent).to.contain('h1 { color: red; }')
135135
// import with scoped
136-
var id = '_v-' + hash(require.resolve('./fixtures/style-import.vue'))
136+
var id = 'data-v-' + genId(require.resolve('./fixtures/style-import.vue'))
137137
expect(styles[1].textContent).to.contain('h1[' + id + '] { color: green; }')
138138
done()
139139
})
@@ -196,7 +196,7 @@ describe('vue-loader', function () {
196196
entry: './test/fixtures/media-query.vue'
197197
}, function (window) {
198198
var style = window.document.querySelector('style').textContent
199-
var id = '_v-' + hash(require.resolve('./fixtures/media-query.vue'))
199+
var id = 'data-v-' + genId(require.resolve('./fixtures/media-query.vue'))
200200
expect(style).to.contain('@media print {\n .foo[' + id + '] {\n color: #000;\n }\n}')
201201
done()
202202
})

0 commit comments

Comments
 (0)