UNPKG

3 kBtext/coffeescriptView Raw
1###
2 读取.silky下的json文件,用这个数据来渲染handlebars
3###
4_fs = require 'fs-extra'
5_path = require 'path'
6_utils = require './utils'
7_ = require 'lodash'
8
9_data = {
10 json: {},
11 less: {},
12 language: {}
13}
14
15#读取单个语言文件
16readLanguageFile = (file)->
17 extname = _path.extname(file)
18 #目前只接受json的文件
19 return if extname isnt '.json'
20
21 key = getDataKey file
22 _data.language[key] = _fs.readJSONSync(file, 'utf-8')
23
24#读取语言文件
25readLanguage = (dir)->
26 return if not _fs.existsSync dir
27 _fs.readdirSync(dir).forEach (filename)-> readLanguageFile _path.join(dir, filename)
28
29#根据文件名获取key
30getDataKey = (file)->
31 _path.basename file, _path.extname(file)
32
33#读取js文件,直接require
34readScript = (normalFile, overrideFile)->
35 #normal中不存在的不处理
36 return if not _fs.existsSync normalFile
37 delete require.cache[normalFile]
38
39 normal = require normalFile
40 #没有需要覆盖的文件
41 return normal if not _fs.existsSync overrideFile
42 delete require.cache[overrideFile]
43
44 override = require overrideFile
45 _.extend normal, override
46
47#全并文件
48combineFile = (filename)->
49 #只处理json和less的文件
50 extname = _path.extname(filename).replace('.', '')
51 #提示用户,将不支持json格式的数据文件
52 console.log "警告:json格式的数据文件将不被新版本支持 - > #{filename}" if /^json$/.test extname
53 return false if extname not in ['json', 'less', 'js']
54
55 key = getDataKey filename
56 normaFile = _path.join _utils.localSilkyIdentityDir(), 'data', 'normal', filename
57 overrideFile = _path.join _utils.localSilkyIdentityDir(), 'data', _utils.options.env, filename
58
59 #如果是js文件,直接引入
60 if extname is 'js'
61 content = readScript(normaFile, overrideFile)
62 return _data.json[key] = content
63
64 normalData = _utils.readFile normaFile
65 #取特殊环境将要覆盖的数据
66 if _fs.existsSync overrideFile
67 overrideData = _utils.readFile overrideFile
68
69 #将数据存入
70 if extname is 'json'
71 content = JSON.parse(normalData)
72 _.extend content, JSON.parse(overrideData) if overrideData
73 else
74 content = normalData + (overrideData || '')
75
76 _data[extname][key] = content
77
78
79#入口
80exports.init = ()->
81 #读取normal的数据
82 normalDir = _path.join _utils.localSilkyIdentityDir(), 'data', 'normal'
83 #目录不存在,不查读取数据
84 return if not _fs.existsSync normalDir
85
86 #循环读取所有数据到缓存中
87 _fs.readdirSync(normalDir).forEach (filename)->
88 combineFile filename
89
90 #循环读取所有语言到数据中
91 readLanguage _utils.languageDirectory()
92 #监控数据文件的变化
93 watch()
94
95#监控文件的改变
96watch = ()->
97 dataDir = _path.join _utils.localSilkyIdentityDir(), 'data'
98 #监控数据文件的变化
99 _utils.watch dataDir, (f)-> combineFile _path.basename(f)
100
101 #监控语言文件的变化
102 langDir = _utils.languageDirectory()
103 _utils.watch langDir, (f)-> readLanguage f
104
105exports.whole = _data
\No newline at end of file