从Ruby源代码翻译过来的
function split_path(path){
return path.split(/\/+/);
}
function merge_path(base,rel){
// RFC2396, Section 5.2, 5)
if (rel[0] == '#'){
// RFC2396, Section 5.2, 5)
return rel;
}
// RFC2396, Section 5.2, 6)
var base_path = split_path(base);
var rel_path = split_path(rel);
// RFC2396, Section 5.2, 6), a)
if(base_path[base_path.length-1] == '..'){
base_path.push('');
}
var i;
while ((i = base_path.indexOf('..'))+1){
base_path = base_path.slice(i - 1, 2);
}
if (base_path.length == 0){
base_path = ['']; // keep '/' for root directory
}else{
base_path.pop();
}
// RFC2396, Section 5.2, 6), c)
// RFC2396, Section 5.2, 6), d)
if (rel_path[rel_path.length-1] == '.' || rel_path[rel_path.length-1] == '..'){
rel_path.push('');
}
var old_rel_path = rel_path;
rel_path = [];
for(var i=0,l=old_rel_path.length;i<l;i++){
if(old_rel_path[i]!='.'){
rel_path.push(old_rel_path[i]);
}
}
// RFC2396, Section 5.2, 6), e)
var tmp = []
for(var i=0,l=rel_path.length;i<l;i++){
var x = rel_path[i];
if ( x == '..' && !(tmp.length == 0 || tmp[tmp.length-1]=='..')){
tmp.pop();
}else{
tmp.push(x);
}
}
var add_trailer_slash = true;
var x;
while (x = tmp.shift()){
if (x == '..' && base_path.length > 1){
// RFC2396, Section 4
// a .. or . in an absolute path has no special meaning
base_path.pop();
}else{
base_path.push(x);
for(var i=0,l=tmp.length;i<l;i++){
var t=tmp[i];
base_path.push(t);
}
add_trailer_slash = false;
break;
}
}
if (add_trailer_slash){
base_path.push('') ;
}
return base_path.join('/')
}
//merge_path("/abc/def/gy","./dde")
分享到:
相关推荐
src: ['path/to/geojson/files/*.geojson'], dest: 'output/merged.geojson' } } }); grunt.loadNpmTasks('grunt-geojson-merge'); grunt.registerTask('default', ['geojsonmerge']); }; ``` 这里,`src`...
merge-driver(1)-用于自动合并锁文件的git merge驱动程序自动设置(推荐): 要立即开始使用它: $ npx npm-merge-driver install --global或按项目在本地安装: $ cd /path/to/git/repository$ npx npm-merge-...
// path to all files to load/merge together ] } files数组中列出的每个文件都必须是JSON文件。 每个文件的路径必须是从应用程序模块的根开始的相对路径(例如src / filesToMerge / file1.json)。 安装 npm ...
7. **函数工具**:Ramda提供了大量实用的工具函数,如`assoc`用于添加属性到对象,`path`用于访问嵌套对象属性,`merge`用于合并对象,以及`thunkify`用于转换异步函数等。 8. **部分应用(Partial Application)**:...
Practical instruction on using JavaScript Object Notation (JSON) with MySQL This hands-on guide teaches, step by step, how to use JavaScript Object Notation (JSON) with MySQL. Written by a MySQL ...
language-javascript-jsx linter linter-eslint linter-flow mac-fix-path merge-conflicts minimap minimap-autohide minimap-bookmarks minimap-find-and-replace minimap-git-diff minimap-hide minimap-...
文档合并 用于将 Polymer 元素文档合并在一起的工具。 示例用法 查看demo.js文件 ...var generate = require('doc-merge'); generate(FIXTURES, OUTPUT, {config: 'test/fixtures/config.json' });
JS、CSS 合并压缩工具是用于优化前端资源加载效率的重要工具,它们能够将多个 JavaScript 和 CSS 文件合并为一个文件,并进行压缩,减少网络请求次数,从而提高网页加载速度。本篇将详细介绍名为 TomsTools 的一套 ...
`webpack-chain` 也很好地与 `webpack-merge` 集成,允许你在多个配置文件之间合并差异。 通过以上介绍,我们可以看到 `webpack-chain` 为 Webpack 配置带来了极大的灵活性和可维护性。尽管它增加了学习曲线,但...
fis-postprocessor-jswrapper Fis的后处理器插件,用于使用闭包或amd定义包装JavaScript。设定$ vi path/to/project/fis-conf.jsfis . config . merge ( { settings : { postprocessor : { jswrapper : { //wrap ...
Webpack 4 是一款强大的前端模块打包工具,它能够解析、转换和优化JavaScript、CSS、图片等各类资源,形成可供浏览器使用的静态资源。本篇文章主要针对Webpack 4的基础配置进行总结,帮助开发者快速理解和掌握其核心...
"output_path": "D:\\projects\\github_project\\merge_js_css\\examples\\output", //输出合并后js、css的目录 "tmp_js_json_dir": "D:\\projects\\github_project\\merge_js_css\\examples\\json\\js", //js合并...
这只是Webpack基础入门的冰山一角,实际项目中还需要配置解决模块路径(resolve)、优化(optimization)、多环境支持(webpack-merge)、热更新(Hot Module Replacement)等更多高级特性。继续深入学习,你将能够...
其中,排序算法如快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)是常见的数据结构操作。搜索算法如二分查找(Binary Search)和广度优先搜索(BFS)也是Python开发者需要熟练掌握的。此外,...
3. **添加库文件路径**:在新建的库配置中,点击“File Path”文本框,浏览并选择刚才导入的PureJS库文件。这告诉Spket在哪里查找PureJS的定义。 4. **定义库成员**:为了让Spket知道PureJS中的所有函数和对象,你...
- **merge**: 使用 `dot.merge(obj1, obj2)` 合并两个对象,其中 `obj2` 的属性会覆盖 `obj1` 的同名属性。 - **transform**: 使用 `dot.transform(obj, rules)` 可以根据预定义的规则(规则由点表示法指定)转换...
解压后,你需要将`depot_tools`的路径添加到系统的PATH环境变量中,这样在命令行中就可以直接调用这些工具了。 `depot_tools`包含了一些关键工具,如: 1. **gclient**:这是一个Python脚本,用于管理依赖关系。在...
TypeScript是一种强类型的JavaScript超集,它提供了静态类型检查,可以提升代码质量和可维护性。 在编辑SVG时,我们可以使用一些前端库,如`svg.js`或`Snap.svg`,它们提供了丰富的API来操作SVG元素。Vue3可以通过`...
1. 工具库:在实际开发中,可以创建一个名为`merge-package-json`的Node.js工具库,提供命令行接口,方便开发者合并多模块的`package.json`配置。 2. CI/CD集成:结合GitLab CI/CD或者GitHub Actions,自动化执行...
cd path/to/local/repository git pull ``` **3. 创建与切换分支**: - 创建新分支: ```bash git branch ``` - 切换到指定分支: ```bash git checkout ``` **4. 提交更改**: - 添加文件到暂存区: ...