Skip to content

Commit 7683c39

Browse files
paulpflugyyx990803
authored andcommitted
add advanced dependency checking (fixes vuejs#81) (vuejs#83)
* added advanced dependency checking for babel as an example * fixes * fixed babel-runtime require * replaced peerDependencies with checks & warning for missing modules * bugfix * spelling * added test for missing dependencies
1 parent 6046289 commit 7683c39

File tree

11 files changed

+69
-40
lines changed

11 files changed

+69
-40
lines changed

lib/compiler.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var chalk = require('chalk')
1212
var assign = require('object-assign')
1313
var deindent = require('de-indent')
1414
var Emitter = require('events').EventEmitter
15+
var ensureRequire = require('./ensure-require.js')
1516

1617
var htmlMinifyOptions = {
1718
collapseWhitespace: true,
@@ -110,6 +111,7 @@ compiler.compile = function (content, filePath, cb) {
110111
// styles
111112
var style = extract(parts, 'style')
112113
if (style) {
114+
ensureRequire('styles','vueify-insert-css')
113115
style = JSON.stringify(style)
114116
output +=
115117
'var __vueify_style__ = require("vueify-insert-css").insert(' + style + ')\n'
@@ -132,6 +134,7 @@ compiler.compile = function (content, filePath, cb) {
132134
}
133135
// hot reload
134136
if (process.env.NODE_ENV !== 'production' && !process.env.VUEIFY_TEST) {
137+
ensureRequire('hot-reload','vue-hot-reload-api')
135138
output +=
136139
'if (module.hot) {(function () {' +
137140
' module.hot.accept()\n' +

lib/compilers/babel.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
var options = require('./options')
2+
var ensureRequire = require('../ensure-require.js')
23

34
module.exports = function (raw, cb) {
5+
ensureRequire('babel',['babel-core','babel-preset-es2015','babel-plugin-transform-runtime',['babel-runtime/core-js.js','babel-runtime']])
46
try {
57
var babel = require('babel-core')
68
var res = babel.transform(raw, options.babel || {})

lib/compilers/coffee.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
var options = require('./options')
2+
var ensureRequire = require('../ensure-require.js')
23

34
module.exports = function (raw, cb) {
4-
try {
5-
var coffee = require('coffee-script')
6-
} catch (err) {
7-
return cb(err)
8-
}
5+
ensureRequire('coffee',['coffee-script'])
6+
var coffee = require('coffee-script')
97
try {
108
var js = coffee.compile(raw, options.coffee || {})
119
} catch (err) {

lib/compilers/jade.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
var options = require('./options')
2+
var ensureRequire = require('../ensure-require.js')
23

34
module.exports = function (raw, cb) {
4-
try {
5-
var jade = require('jade')
6-
} catch (err) {
7-
return cb(err)
8-
}
5+
ensureRequire('jade','jade')
6+
var jade = require('jade')
97
try {
108
var html = jade.compile(raw, options.jade || {})()
119
} catch (err) {

lib/compilers/less.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
var options = require('./options')
22
var assign = require('object-assign')
33
var path = require('path')
4+
var ensureRequire = require('../ensure-require.js')
45

56
module.exports = function (raw, cb, compiler, filePath) {
6-
try {
7-
var less = require('less')
8-
} catch (err) {
9-
return cb(err)
10-
}
7+
ensureRequire('less','less')
8+
var less = require('less')
119

1210
var opts = assign({
1311
filename: path.basename(filePath)

lib/compilers/pug.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
var options = require('./options')
2+
var ensureRequire = require('../ensure-require.js')
23

34
module.exports = function (raw, cb) {
4-
try {
5-
var pug = require('pug')
6-
} catch (err) {
7-
return cb(err)
8-
}
5+
ensureRequire('pug','pug')
6+
var pug = require('pug')
97
try {
108
var html = pug.compile(raw, options.pug || {})()
119
} catch (err) {

lib/compilers/sass.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
var options = require('./options')
22
var assign = require('object-assign')
33
var path = require('path')
4+
var ensureRequire = require('../ensure-require.js')
45

56
module.exports = function (raw, cb, compiler, filePath) {
6-
try {
7-
var sass = require('node-sass')
8-
} catch (err) {
9-
return cb(err)
10-
}
7+
ensureRequire('sass','node-sass')
8+
var sass = require('node-sass')
119

1210
var sassOptions = assign({
1311
data: raw,

lib/compilers/stylus.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
var options = require('./options')
22
var assign = require('object-assign')
33
var path = require('path')
4+
var ensureRequire = require('../ensure-require.js')
45

56
module.exports = function (raw, cb, compiler, filePath) {
6-
try {
7-
var stylus = require('stylus')
8-
} catch (err) {
9-
return cb(err)
10-
}
7+
ensureRequire('stylus','stylus')
8+
var stylus = require('stylus')
119

1210
var opts = assign({
1311
filename: path.basename(filePath)

lib/ensure-require.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
module.exports = function(name,deps) {
2+
var i,len,missing=[];
3+
if (typeof deps === "string") {
4+
deps = [deps]
5+
}
6+
for (i = 0, len = deps.length; i < len; i++) {
7+
var mis, req = deps[i]
8+
if (typeof req === "string") {
9+
mis = req
10+
} else {
11+
mis = req[1]
12+
req = req[0]
13+
}
14+
try {
15+
require.resolve(req)
16+
} catch (e) {
17+
missing.push(mis)
18+
}
19+
}
20+
if (missing.length > 0) {
21+
var message = 'You are trying to use "'+name+'". '
22+
var npmInstall = 'npm install --save-dev '+missing.join(" ")
23+
if (missing.length > 1) {
24+
var last = missing.pop()
25+
message += missing.join(', ') + ' and ' +last + ' are '
26+
} else {
27+
message += missing[0] + ' is '
28+
}
29+
message += 'missing.\n\nTo install run:\n'+npmInstall
30+
throw new Error(message)
31+
}
32+
}

package.json

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,18 @@
3636
"through": "^2.3.6",
3737
"vue-template-validator": "^1.0.1"
3838
},
39-
"peerDependencies": {
40-
"babel-core": "^6.8.0",
41-
"babel-runtime": "^6.0.0",
42-
"babel-preset-es2015": "^6.6.0",
43-
"babel-plugin-transform-runtime": "^6.8.0",
44-
"vue-hot-reload-api": "^1.2.0",
45-
"vueify-insert-css": "^1.0.0"
46-
},
4739
"devDependencies": {
4840
"babel-core": "^6.8.0",
49-
"babel-runtime": "^6.0.0",
50-
"babel-preset-es2015": "^6.6.0",
5141
"babel-plugin-transform-runtime": "^6.6.1",
42+
"babel-preset-es2015": "^6.6.0",
43+
"babel-runtime": "^6.0.0",
5244
"coffee-script": "^1.10.0",
5345
"jade": "^1.11.0",
5446
"less": "^2.5.1",
5547
"mocha": "^2.3.3",
5648
"node-sass": "^3.3.3",
5749
"pug": "^2.0.0-alpha6",
50+
"rewire": "^2.5.1",
5851
"stylus": "^0.52.4",
5952
"vue-hot-reload-api": "^1.2.0",
6053
"vueify-insert-css": "^1.0.0"

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy