UNPKG

1.61 kBJavaScriptView Raw
1var _ = require('lodash');
2var fs = require('graceful-fs');
3var minimatch = require('minimatch');
4var mutil = require('miaow-util');
5var path = require('path');
6
7var Module = require('./Module');
8var destTask = require('./tasks/dest');
9
10function ModuleFactory(options) {
11 this.options = options;
12}
13
14ModuleFactory.prototype.create = function(src, contents, callback) {
15 if (_.isFunction(contents)) {
16 callback = contents;
17 contents = null;
18 }
19
20 var module = new Module();
21 module.src = src;
22 module.srcDir = path.dirname(src);
23
24 // 设置模块的参数
25 var options = _.find(this.options, function(item) {
26 return minimatch(src, item.test, {matchBase: true, dot: true});
27 });
28
29 // 追加输出任务
30 module.tasks = options.tasks.concat({
31 task: destTask,
32 options: {}
33 });
34
35 // 扩展信息
36 _.assign(module, _.pick(options, ['context', 'output', 'domain', 'hashLength', 'hashConnector', 'ext', 'charset', 'debug']));
37
38 // 设置模块的输出目录
39 module.destDir = (options.release || '$0').replace('$0', module.srcDir);
40
41 // 设置URL
42 module.url = (options.url || '$0').replace('$0', module.srcDir);
43
44 // 设置扩展信息
45 module.extra = {};
46
47 function setContents(err, contents) {
48 if (err) {
49 return callback(err);
50 }
51
52 // 设置模块内容及Hash值
53 module.srcContents = module.contents = contents;
54 module.srcHash = mutil.hash(contents);
55
56 callback(null, module);
57 }
58
59 if (contents) {
60 setContents(null, contents);
61 } else {
62 fs.readFile(path.resolve(options.context, src), setContents);
63 }
64};
65
66module.exports = ModuleFactory;