我正在创建一个Node.js命令行界面。它被全局安装并使用bin文件来执行。
我计划在我正在工作的文件的根目录打开一个命令窗口,然后只需运行命令即可。但是我无法确定当前的工作目录,因为process.cwd()
返回的是node包的目录。最初,我认为由于代码是使用批处理文件作为包装器执行的(这就是bin文件可以在开头不使用node时执行的方式),所以这是不可能的,但是CoffeeScript可以实现。我查看了CoffeeScript源代码,但无法理解(经验不足)。
如果要测试,请创建带有此package.json文件的软件包:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
这是在bin目录中的测试包文件:
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
有人能解释一下吗。
接着尝试获取lib/test目录内的命令行目录。
process.chdir()
执行后,有没有任何方法可以获取原来的目录? - reergymerejvar originalCwd = process.cwd();
),然后执行你的process.chdir()
,之后可以返回到原始目录。 - Swivel../lib/test
是可移植的吗? - Sebastian../lib/test
是可移植的,而Windows的对应项..\lib\test
则不是... - Christian Ulbrich