'use strict';
/**
* 基于路径查找文件,支持相对路径,基于项目的绝对路径以及 fis Id.
*
* @example
* // 基于指定目录的相对路径文件查找。
* var info = fis.uri('./index.js', root + '/static/');
*
* // 基于项目的绝对路径。
* var info = fis.uri('/static/index.js');
*
* // 通过 fis Id 查找,不推荐,因为如果跨模块了,是读取不到文件的。
* var info = fis.uri('common:static/index.js');
* @param {String} path 路径
* @param {String} dirname 文件夹名
* @return {Object} { file, origin, quote, query, hash, rest, isFISID }
* @namespace fis.uri
*/
var uri = module.exports = function(path, dirname) {
var info = fis.util.stringQuote(path),
qInfo = fis.util.query(info.rest);
info.query = qInfo.query;
info.hash = qInfo.hash;
info.rest = qInfo.rest;
if (info.rest) {
path = info.rest;
var config = fis.media();
var nsConnector = config.get('namespaceConnector', ':');
var idx = path.indexOf(nsConnector);
var file;
if (~idx) {
info.isFISID = true;
var ns = path.substring(0, idx);
if (ns === config.get('namespace')) {
file = fis.project.getProjectPath(path);
}
} else if (path[0] === '/') {
file = fis.project.getProjectPath(path);
} else if (dirname) {
file = fis.util(dirname, path);
} else if (!config.get('namespace')) {
file = fis.project.getProjectPath(path);
if (file && fis.util.isFile(file)) {
info.isFISID = true;
}
} else {
fis.log.error('invalid dirname.');
}
if (file && fis.util.isFile(file)) {
info.file = fis.file(file);
}
}
return info;
};
/**
* 获取目录id表识
* @param {String} path 路径
* @param {String} dirname 文件夹
* @return {Object} { id, file, origin, quote, query, hash, rest, isFISID }
*/
uri.getId = function(path, dirname) {
var info = uri(path, dirname);
if (info.file) {
info.id = info.file.getId();
} else {
info.id = info.rest;
}
return info;
};
Namespaces
- fis
- cache
- cli
- compile
- lang
- config
- emitter
- file
- log
- project
- uri
- util
- applyMatches
- base64
- camelcase
- clone
- copy
- del
- download
- escapeReg
- escapeShellArg
- escapeShellCmd
- exist
- ext
- filter
- find
- getMimeType
- glob
- install
- isAbsolute
- isDir
- isEmpty
- isFile
- isImageFile
- isTextFile
- isUtf8
- isWin
- map
- md5
- merge
- mkdir
- mtime
- nohup
- pad
- parseUrl
- pathinfo
- pipe
- query
- read
- readBuffer
- readJson
- realpath
- realpathSafe
- stringQuote
- toEncoding
- touch
- upload
- write