life
» 奋斗!
就算全世界都在怀疑你, 你也要相信自己!
Toggle navigation
life
主页
leanote开发
javascript
golang
About Me
归档
标签
grunt-cmd-transport 依赖分析不全的问题
? grunt-cmd-transport ?
? 依赖分析 ?
2015-07-03 23:45:34
650
0
1
life
? grunt-cmd-transport ?
? 依赖分析 ?
在项目中发现如果require的层级超过4层, 4层及以后的依赖就不会分析出. 经分析, 其实不是层级的原因. 是绝对与相对路径的原因. 比如有以下目录 ``` src/ a.js b.js c.js d.js ``` 依赖关系是a -> b -> c -> d 现在分析a的依赖关系. 如果在每个依赖都是用相对的路径来包含, 比如require('./b/'), './c', './d'. 分析a时就能把b, c, d都包含进来. 如果在a中require('/src/b') 是以绝对路径依赖b的, 此时只能分析到a的依赖关系为: 'b', 'c'. 表明, 绝对模块的依赖不会递归分析. 分析代码就可以看出. https://github.com/spmjs/grunt-cmd-transport/blob/master/tasks/lib/script.js#L160 ```javascript return parsed.dependencies.map(function(id) { // 如果是相对模块 if (id.charAt(0) === '.') { var origId = id; id = iduri.appendext(id); var depFilepath = path.join(path.dirname(filepath), id); var depFile = getFileInfo(depFilepath); if (!depFile) return; var obj = { id: origId, path: depFile.path, contents: depFile.contents, hash: depFile.hash, relative: true }; if (depMap) depMap[origId] = obj; // 递归分析子模块依赖 return [obj].concat(parseFileDependencies(depFilepath)); } else { // 绝对模块不递归分析 return parseModuleDependencies(id); } }); ``` 解决方法, 改源码. 现在的源码是0.5.1的, 我是在0.4.1下分析的. 同样可以用于0.5.1: [script.js](https://leanote.com/api/file/getAttach?fileId=5596adf938f4110921000628) 将该文件覆盖grunt-cmd-transport/tasks/lib/script.js 为什么不直接改0.5.1的源码? 我试过, 无奈放弃了. 0.5.1改了很多, 感觉更乱(getFileInfo里调用parseDependencies, parseDependencies里又调用getFileInfo). 所以, 就不给那个项目发pull request了, 仅发了一个issue评论 https://github.com/spmjs/grunt-cmd-transport/issues/68#issuecomment-118244858 . TIPS: **以后同一项目尽量用相对路径!!**
上一篇:
Leanote IOS 开发小记
下一篇:
git 分支管理
0
赞
650 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网