在全局节点包中获取一个文件路径作为参数。

问题描述 投票:0回答:1

我正试图创建一个全局节点包,用于在该包的运行目录下做一些事情.例如,我想用该节点包CLI删除一些文件。命令是这样的。

my-package ./test-file.txt

我怎么才能得到 ./test-file.txt 路径作为包节点应用的一个参数吗?我认为它应该在参数中,但如果有更好的方法,我会很感激知道。

node.js npm
1个回答
1
投票

通常情况下 process.argv 是用来读取参数的。

例如,下面的例子将参数分配到索引处。

  • 下面的例子将参数分配到索引 2filepath 变量。

    const [ , , filepath ] = process.argv;
    
  • 下面的示例将所有参数从index 2args 变量作为一个数组。

    const [ , , ...args ] = process.argv;
    

注意事项 读取的参数由 process.argv 在指数 01 分别是典型的node.js可执行路径和JS文件路径--因此,在上述例子中,我们跳过它们,当 重构 阵列,使用 , ,.


编辑。

根据上位者随后的评论,"我怎么才能得到那个文件的完整路径?

"我怎样才能得到那个文件的完整路径?" 用户会发送一些类似于: ./test.txt 到应用程序。如何获得文件的[绝对]路径?"

首先,下面假设你正在使用node.js构建一个命令行工具--因为这就是你的问题所暗示的。在这种情况下,考虑利用 path.resolve() 递进 process.cwd()filepath 变量。

例如

cli.js

#! /usr/bin/env node

const { resolve } = require('path');

// 1. Obtain the relative path argument provided via
//    the CLI and assign it to the `filename` variable.
const [ , , filepath ] = process.argv;

// 2. Obtain the absolute path for the given relative
//    path and assign it to the `absPath` variable.
const absPath = resolve(process.cwd(), filepath);

然后在 软件包.json 的全局节点包,你必须确保你已经定义了你的 bin 这样的属性。

package.json

{
  ...
  "bin": {
    "my-package": "./cli.js"
  },
  ...
}

请看 npm博客 以了解更多详情。

© www.soinside.com 2019 - 2024. All rights reserved.