node & grunt path處理相關

在nodejs平臺上寫一些工具或者服務, 有不少需求會涉及到對目錄或者文件路徑的處理和操做。整理一些經常使用的處理path的方法html

一、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

二、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.htmlnode

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()等

三、grunt中和路徑相關的處理

--base參數

會將working directory設置爲Gruntfile所在的目錄或--base參數所指定的目錄,默認爲Gruntfile所在的位置api

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內部的代碼實現以下:app

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?');  
}
相關文章
相關標籤/搜索