node & grunt path处理相关

在nodejs平台上写一些工具或者服务, 有很多需求会涉及到对目录或者文件路径的处理和操作。整理一些常用的处理path的方法

1、global

__dirname

Example: running node example.js from /Users/jiao
console.log(__dirname);
// /Users/jiao

__filename

Example: running node example.js from /Users/jiao

console.log(__filename);
// /Users/jiao/example.js

process

Example: running grunt buildguide from /Users/jiao/test
process.execPath   //usr/local/bin/node
process.env.PWD;   //Users/jiao/test
process.cwd();     //Users/jiao/test
 
 
//修改当前进程工作区为/Users/jiao
process.chdir("/Users/jiao"); 
 
process.cwd();     //Users/jiao
process.env.PWD;   //Users/jiao/test

2、node path module

官方解释:This module contains utilities for handling and transforming file paths. Almost all these methods perform only string transformations. The file system is not consulted to check whether paths are valid.
详情参考:http://nodejs.org/api/path.html

path.resolve([from ...], to)

path.resolve('/foo/bar', './baz')
// returns
'/foo/bar/baz'
 
path.resolve('/foo/bar', '/tmp/file/')
// returns
'/tmp/file'
 
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
// if currently in /home/myself/node, it returns
'/home/myself/node/wwwroot/static_files/gif/image.gif'

path.relative(from, to)


path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb')
// returns
'..\\..\\impl\\bbb'
 
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
// returns
'../../impl/bbb'

path.dirname()、path.extname()、path.basename()、path.join()等

3、grunt中和路径相关的处理

--base参数

会将working directory设置为Gruntfile所在的目录或--base参数所指定的目录,默认为Gruntfile所在的位置

process.chdir(grunt.option('base') || path.dirname(gruntfile));

grunt.file.setBase

file.setBase = function() {
   var dirpath = path.join.apply(path, arguments);
   process.chdir(dirpath);
};
grunt.loadNpmTasks(p)

插件的加载路径默认是当前工作目录下面的 node_modules + p + 'tasks', 查看grunt内部的代码实现如下:

var root = path.resolve('node_modules');
var tasksdir = path.join(root, p, 'tasks');
 
//加载grunt 插件的tasks
if (grunt.file.exists(tasksdir)) {
    loadTasks(tasksdir);
} else {
    grunt.log.error('Local Npm module "' + name + '" not found. Is it installed?');  
}
posted @ 2014-07-29 14:48  mininice  阅读(327)  评论(0编辑  收藏  举报