一尘不染

运行节点bin脚本时确定命令行工作目录

node.js

我正在创建节点命令行界面。它是全局安装的,并使用bin文件执行。

我计划在正在处理的文件的根目录下打开一个命令窗口,然后运行命令,但是由于process.cwd()返回节点包的目录,我无法确定当前的工作目录。最初,我假设由于代码是使用批处理文件作为包装器执行的(这就是bin文件可以在开始时没有节点的情况下执行的方式),所以这是不可能的,但是coffee-
script可以做到这一点。我看了看咖啡脚本的源代码,但无法跟踪(经验不足)。

要自己测试,请使用以下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中的命令行目录。


阅读 272

收藏
2020-07-07

共1个答案

一尘不染

  • process.cwd() 如果未在应用程序内部由“ process.chdir”更改命令,则返回已执行命令的目录(而不是节点软件包的目录)。
  • __filename 返回放置文件的绝对路径。
  • __dirname返回目录的绝对路径__filename

如果需要从模块目录加载文件,则需要使用相对路径。

require('../lib/test');

代替

var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');

require(lib + '/test');

它总是相对于它从中调用的文件,而不依赖于当前的工作目录。

2020-07-07