UNPKG

1.29 kBJavaScriptView Raw
1var _ = require('lodash');
2var async = require('async');
3var path = require('path');
4var realPath = require('real-path');
5var resolve = require('resolve');
6
7function Resolver(options) {
8 this.options = options;
9}
10
11Resolver.prototype.resolve = function(context, request, options, callback) {
12 options = _.assign({basedir: context}, this.options, options || {});
13
14 var requests = [request];
15
16 _.each(requests, function(request) {
17 var extension = path.extname(request);
18 var alias = options.extensionAlias[extension];
19
20 if (extension && alias) {
21 alias = _.isArray(alias) ? alias : [alias];
22
23 _.each(_.uniq(alias), function(item) {
24 requests.push(request.replace(new RegExp(extension + '$'), item));
25 });
26 }
27 });
28
29 var complete = _.once(function () {
30 completeTime && clearTimeout(completeTime);
31
32 if (!result || realPath(result) !== result) {
33 return callback(new Error(request + '未被查找到!'));
34 }
35
36 callback(null, result);
37 });
38
39 var completeTime = setTimeout(complete, 30e3);
40
41 var result;
42 async.detect(
43 requests,
44 function(request, callback) {
45 resolve(request, options, function(err, res) {
46 result = res;
47
48 callback(!!res);
49 });
50 },
51
52 complete);
53};
54
55module.exports = Resolver;