Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9f00d51

Browse files
committed
simplify deps by dynamically normalizing path
1 parent c6d2827 commit 9f00d51

File tree

4 files changed

+33
-29
lines changed

4 files changed

+33
-29
lines changed

‎lib/loader.js

+16-20
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ var assign = require('object-assign')
33
var parse = require('./parser')
44
var hash = require('hash-sum')
55
var path = require('path')
6+
var normalizeDepPath = require('./normalize-dep')
67

78
var defaultLang = {
89
template: 'html',
@@ -12,7 +13,9 @@ var defaultLang = {
1213

1314
var rewriterInjectRE = /\b(css(?:-loader)?(?:\?[^!]+)?)(?:!|$)/
1415
var selectorPath = 'vue-loader/lib/selector'
15-
var templateLoader = 'vue-loader/lib/template-loader'
16+
var templateLoaderPath = 'vue-loader/lib/template-loader'
17+
var styleLoaderPath = normalizeDepPath('vue-style-loader')
18+
var hotReloadAPIPath = normalizeDepPath('vue-hot-reload-api')
1619

1720
module.exports = function (content) {
1821
this.cacheable()
@@ -24,25 +27,18 @@ module.exports = function (content) {
2427
var moduleId = '_v-' + hash(filePath)
2528
var styleRewriter = 'vue-loader/lib/style-rewriter?id=' + moduleId
2629

27-
var defaultLoaders = {
28-
html: 'vue-loader/lib/template-compiler?id=' + moduleId,
29-
css: 'vue-style-loader!css-loader',
30-
js: 'babel-loader?presets[]=es2015&plugins[]=transform-runtime&comments=false'
31-
}
32-
33-
// respect user babel options
34-
if (this.options.babel) {
35-
defaultLoaders.js = 'babel-loader'
36-
}
37-
38-
// enable css source map if needed
39-
if (
30+
var needCssSourceMap =
4031
this.sourceMap &&
4132
!this.minimize &&
42-
options.cssSourceMap !== false &&
43-
process.env.NODE_ENV !== 'production'
44-
) {
45-
defaultLoaders.css = 'vue-style-loader!css-loader?sourceMap'
33+
process.env.NODE_ENV !== 'production' &&
34+
options.cssSourceMap !== false
35+
36+
var defaultLoaders = {
37+
html: 'vue-loader/lib/template-compiler?id=' + moduleId,
38+
css: styleLoaderPath + '!css-loader' + (needCssSourceMap ? '?sourceMap' : ''),
39+
js: this.options.babel
40+
? 'babel-loader' // respect user options
41+
: 'babel-loader?presets[]=es2015&plugins[]=transform-runtime&comments=false'
4642
}
4743

4844
// check if there are custom loaders specified via
@@ -102,7 +98,7 @@ module.exports = function (content) {
10298
// unknown lang, infer the loader to be used
10399
switch (type) {
104100
case 'template':
105-
return defaultLoaders.html + '!' + templateLoader + '?raw&engine=' + lang + '!'
101+
return defaultLoaders.html + '!' + templateLoaderPath + '?raw&engine=' + lang + '!'
106102
case 'styles':
107103
return defaultLoaders.css + '!' + rewriter + lang + '!'
108104
case 'script':
@@ -198,7 +194,7 @@ module.exports = function (content) {
198194
) {
199195
output +=
200196
'\nif (module.hot) {(function () {' +
201-
' var hotAPI = require("vue-hot-reload-api")\n' +
197+
' var hotAPI = require("' + hotReloadAPIPath + '")\n' +
202198
' hotAPI.install(require("vue"), false)\n' +
203199
' if (!hotAPI.compatible) return\n' +
204200
' module.hot.accept()\n' +

‎lib/normalize-dep.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var fs = require('fs')
2+
var path = require('path')
3+
4+
module.exports = function normalizeDepPath (dep) {
5+
if (fs.existsSync(path.resolve(__dirname, '../node_modules', dep))) {
6+
// npm 2 or npm linked
7+
return 'vue-loader/node_modules/' + dep
8+
} else {
9+
// npm 3
10+
return dep
11+
}
12+
}

‎lib/template-compiler.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
var compiler = require('vue-template-compiler')
22
var loaderUtils = require('loader-utils')
3+
var normalizeDepPath = require('./normalize-dep')
4+
var hotReloadAPIPath = normalizeDepPath('vue-hot-reload-api')
35

46
// vue compiler module for using file-loader img src
57
var options = {
@@ -49,7 +51,7 @@ module.exports = function (html) {
4951
'\nif (module.hot) {\n' +
5052
' module.hot.accept()\n' +
5153
' if (module.hot.data) {\n' +
52-
' require("vue-hot-reload-api").rerender("' + moduleId + '", module.exports)\n' +
54+
' require("' + hotReloadAPIPath + '").rerender("' + moduleId + '", module.exports)\n' +
5355
' }\n' +
5456
'}'
5557
}

‎package.json

+2-8
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,9 @@
3737
"object-assign": "^4.0.0",
3838
"postcss": "^5.0.10",
3939
"postcss-selector-parser": "^1.1.2",
40-
"vue-template-compiler": "^0.1.0"
41-
},
42-
"peerDependencies": {
43-
"css-loader": "*",
40+
"vue-hot-reload-api": "^2.0.0",
4441
"vue-style-loader": "^1.0.0",
45-
"vue-hot-reload-api": "^1.2.0"
42+
"vue-template-compiler": "^2.0.0-alpha.1"
4643
},
4744
"devDependencies": {
4845
"babel-core": "^6.8.0",
@@ -70,9 +67,6 @@
7067
"stylus": "^0.54.5",
7168
"stylus-loader": "^2.0.0",
7269
"sugarss": "^0.1.3",
73-
"vue-hot-reload-api": "^1.2.0",
74-
"vue-html-loader": "^1.0.0",
75-
"vue-style-loader": "^1.0.0",
7670
"webpack": "^1.12.2"
7771
}
7872
}

0 commit comments

Comments
 (0)