-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex.js
76 lines (58 loc) · 2.24 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
var lang = fis.compile.lang;
var rRequire = /"(?:[^\\"\r\n\f]|\\[\s\S])*"|'(?:[^\\'\n\r\f]|\\[\s\S])*'|(\/\/[^\r\n\f]+|\/\*[\s\S]+?(?:\*\/|$))|\brequire\s*\(\s*('|")(.+?)\2\s*\)/g;
var css2js = require('fis3-preprocessor-css2js');
module.exports = function(content, file, options) {
var mode = options.mode;
return content.replace(rRequire, function(m, comment, quote, value) {
if (!value)return m;
var info = fis.project.lookup(value, file);
if (!info.file || !info.file.isCssLike) {
if (!info.file && /\.css$/.test(value)) {
m = "''/*@require " +value+ "*/";
}
return m;
}
switch (mode) {
case 'dep':
case 'dependency':
m = "'" + lang.info.wrap(lang.require.wrap(value)) + "'/*@require " + lang.uri.wrap(value) + "*/";
break;
case 'embed':
case 'inline':
var f = info.file;
fis.compile(f);
var content = css2js.processCss(f.getContent(), {
template: 'vanilla_runner'
});
m = content;
break;
case 'jsRequire':
var f = info.file;
fis.compile(f);
var newFile = fis.file.wrap(f.dirname + '/' + f.filename + f.rExt + '.js');
var content = css2js.processCss(f.getContent(), {
template: 'vanilla_runner'
});
newFile.setContent(content);
newFile.isMod = true;
newFile.moduleId = newFile.id;
fis.compile(newFile);
// 其他文件的require中引用的是moduleId,方便从ret.ids中查找到文件,参考deps-pack打包。
file.extras = file.extras || {};
file.extras.derived = file.extras.derived || [];
file.extras.derived.push(newFile);
m = 'require(' + quote + (newFile.moduleId || newFile.id) + quote + ')'
break;
default:
break;
}
return m;
})
};
module.exports.defaultOptions = {
// 可选择的值
// dep|dependency 【推荐】 简单的标记依赖,fis 资源加载器能把这些依赖分析到,然后直接在 <head> 中用 link 插入:
// embed | inline 像 webpack 那样直接把 css 转成 js 插入到 js 里面。
// jsRequire 将目标文件转成 js 但是并不内嵌,而是可以通过 js 的 require 方式加载。
mode: 'dep'
}